Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
a35b24c
Arquivos iniciais
josevictorsss Mar 30, 2021
b20f118
Merge pull request #1 from future4code/initial-files
josevictorsss Mar 30, 2021
c206fed
Update README.md
DanielRatti Mar 30, 2021
6780e41
Update README.md
DanielRatti Mar 30, 2021
c7b1e04
Mudança nos arquivos iniciais
josevictorsss Mar 30, 2021
912f758
Merge pull request #2 from future4code/change-files
josevictorsss Mar 30, 2021
ae0f51e
Criação de docentes ok
josevictorsss Mar 30, 2021
2057019
git ignore, build folder
josevictorsss Mar 30, 2021
e1ee63c
gitignore working now
josevictorsss Mar 30, 2021
8ad11ac
Merge pull request #3 from future4code/create-teacher
DanielRatti Mar 30, 2021
98f0fdb
Criação students
Mar 30, 2021
b6f51be
teste
Mar 30, 2021
1818718
Criação Students
Mar 30, 2021
2d56a8c
Merge branch 'master' into branch-daniel
josevictorsss Mar 30, 2021
4c4c5c7
Merge pull request #4 from future4code/branch-daniel
josevictorsss Mar 30, 2021
d77ec08
Criação de turmas
josevictorsss Mar 30, 2021
d0e8d18
Merge pull request #5 from future4code/create-class
DanielRatti Mar 30, 2021
68676df
Adicionando docentes a turmas
josevictorsss Mar 30, 2021
7f614d7
idade do estudante
Mar 30, 2021
cf76193
Merge pull request #6 from future4code/teacher-class
DanielRatti Mar 30, 2021
5f29aad
Ajustes da validação para selecionar o estudante
josevictorsss Mar 30, 2021
da9aab2
Merge branch 'master' into branch-daniel2
josevictorsss Mar 30, 2021
a29220b
Merge pull request #7 from future4code/branch-daniel2
DanielRatti Mar 30, 2021
d79e8a8
Update README.md
josevictorsss Mar 30, 2021
c777a61
Deletando arquivo inutilizado
josevictorsss Mar 30, 2021
d993b85
Merge pull request #8 from future4code/delete-inutilfile
josevictorsss Mar 30, 2021
09e235e
adicionando aluno a turma
Mar 30, 2021
19e13bd
Merge pull request #9 from future4code/student-class
josevictorsss Mar 30, 2021
33f115d
Exibindo docentes de uma turma
josevictorsss Mar 31, 2021
34cf255
Merge branch 'master' into teacher-from-class
josevictorsss Mar 31, 2021
a008fe4
Merge pull request #10 from future4code/teacher-from-class
DanielRatti Mar 31, 2021
9ab5831
filtrar estudantes por classe
Mar 31, 2021
1cdc929
Filtrar estudante por turma
Mar 31, 2021
d09840f
Merge branch 'master' into select-byClass
josevictorsss Mar 31, 2021
984bd9e
Merge pull request #11 from future4code/select-byClass
josevictorsss Mar 31, 2021
5081f73
Filtra estudantes por hobby
Mar 31, 2021
58c64d8
Merge pull request #12 from future4code/select-byHobby
josevictorsss Mar 31, 2021
c14eb82
Removendo classe do estudante
Mar 31, 2021
5859ec4
Removendo professor de uma turma
josevictorsss Mar 31, 2021
9d78624
Merge pull request #13 from future4code/remove-fromClass
josevictorsss Mar 31, 2021
ee2f640
Merge pull request #14 from future4code/remove-teacher
DanielRatti Mar 31, 2021
da9bf59
Remover o estudante
Mar 31, 2021
dc61752
Merge pull request #15 from future4code/remove-student
josevictorsss Mar 31, 2021
7c88617
Mudança do modulo da turma
josevictorsss Mar 31, 2021
4adb97b
Merge pull request #16 from future4code/change-class-module
DanielRatti Mar 31, 2021
1da9850
Mudança na tabela de Class
josevictorsss Mar 31, 2021
512d8e0
Merge pull request #17 from future4code/table-changes
josevictorsss Mar 31, 2021
cabc0ea
Projeto finalizado
josevictorsss Mar 31, 2021
2ed4794
Merge pull request #18 from future4code/types
josevictorsss Mar 31, 2021
eaa416f
Update README.md
josevictorsss Mar 31, 2021
7402d31
Update README.md
josevictorsss Mar 31, 2021
911cb87
Mudança no nome do controller
josevictorsss Mar 31, 2021
6a0db22
Merge pull request #19 from future4code/last-changes
josevictorsss Mar 31, 2021
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
128 changes: 128 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/
package-lock.json
build/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test
.env*.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Storybook build outputs
.out
.storybook-out
storybook-static

# rollup.js default build output
dist/

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# Temporary folders
tmp/
temp/
build/
98 changes: 65 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,65 @@
## LabenuSystem:

Você estuda na Labenu_ há tanto tempo que já parecem anos, não é? Então, hoje, vamos pedir para criar um sistema que represente o básico da nossa organização.

Ele deve possuir, ao menos, as 3 entidades importantes:

1. Estudantes

Representa estudantes da nossa instituição. Eles devem possuir: id, nome, email, data de nascimento e os principais hobbies dele.

2. Docente

Representa docentes da nossa instituição. Eles devem possuir: id, nome, email, data de nascimento e todas as especialidades dele. Há 7 especialidades: React, Redux, CSS, Testes, Typescript, Programação Orientada a Objetos e Backend

3. Turma

Toda turma é composta das seguintes características: id, nome, data de início, data de término, lista de professores responsáveis, uma lista de alunos e módulo atual em que a turma está.

O módulo pode assumir os valores de 1 a 7 ou `undefined`, indicando que as aulas dessa turma ainda não começaram. Para esse exercício, vamos considerar que existam dois tipos de turma: integral ou noturna. Há uma restrição para o nome das turmas noturnas: tem que terminar com `-na-night`.

As funcionalidades básicas são:

→ Criar estudante;

→ Criar docente;

→ Criar turma;

→ Adicionar estudante na turma;

→ Adicionar docente na turma;

→ Pegar a idade de algum estudante a partir do id
# LabenuSystem

## :memo: Funcionalidades
* Criar estudante
* Criar docente
* Criar turma
* Adicionar estudante a turma
* Adicionar docente a turma
* Pegar a idade de algum estudante a partir do ID
* Exibir estudantes de uma turma
* Exibir docentes de uma turma
* Exibir estudantes que possuam o mesmo hobby
* Remover estudante de uma turma
* Remover estudante
* Remover docente de uma turma
* Mudar turma de módulo

## 💻 Documentação
Teste as rotas com a documentação, basta importar ela para seu postman.

[Postman - LabenuSystem](https://documenter.getpostman.com/view/14145831/TzCMeTwk#a0cffc9e-31bf-48a6-94c5-573cdfa24464)

## ✨ Tecnologias
Esse projeto foi desenvolvido com as seguintes tecnologias:

* Node
* Express
* Typescript
* Cors
* Knex
* MySQL
* Dotenv

## 🚀 Como executar
* Clone o repositório
```
$https://github.com/future4code/epps-labenu-system6.git
```
* Instale as dependências com
```
npm install
```
* Crie um arquivo .env
```
touch .env
```
* Preencha o arquivo .env
```
DB_HOST = Coloque aqui seu endereço do banco de dados
DB_USER = Coloque aqui seu usuário
DB_PASSWORD = Coloque aqui sua senha
DB_SCHEMA = Coloque aqui o nome do banco de dados
```
* Crie as tabelas com
```
npm run table
```
* Inicie o servidor com
```
npm run dev
```

## Desenvolvido por:
- [José Victor](https://www.linkedin.com/in/jose-victor-tf/)
- [Daniel Ratti](https://www.linkedin.com/in/daniel-ratti-b81721208/)
37 changes: 37 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "epps-labenu-system6",
"version": "1.0.0",
"description": "Você estuda na Labenu_ há tanto tempo que já parecem anos, não é? Então, hoje, vamos pedir para criar um sistema que represente o básico da nossa organização.",
"main": "index.js",
"scripts": {
"start": "tsc && node ./build/index.js",
"table": "tsc && node ./build/database/migrations/createTables.js",
"dev": "ts-node-dev ./src/server.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/future4code/epps-labenu-system6.git"
},
"keywords": [],
"author": "José Victor, Daniel Ratti",
"license": "ISC",
"bugs": {
"url": "https://github.com/future4code/epps-labenu-system6/issues"
},
"homepage": "https://github.com/future4code/epps-labenu-system6#readme",
"devDependencies": {
"@types/cors": "^2.8.10",
"@types/express": "^4.17.11",
"ts-node-dev": "^1.1.6",
"typescript": "^4.2.3"
},
"dependencies": {
"@types/knex": "^0.16.1",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"knex": "^0.95.4",
"mysql": "^2.18.1"
}
}
67 changes: 67 additions & 0 deletions src/controllers/ClassController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { Request, Response } from "express";
import { changeClassModule } from "../models/changeClassModule";
import { insertClass } from "../models/insertClass";
import { ClassInfo } from "../types/class";
import { checkDate, formatDate } from "../utilities/verifiers";

class ClassController {
async create(req: Request, res: Response) {
let errorCode: number = 404;
try {
const {
name,
start_date,
end_date,
module,
type,
} = req.body as ClassInfo;
const checkingStartDate = checkDate(start_date);
const checkingEndDate = checkDate(end_date);
let editName = name;
if (type === "Noturna") {
editName = (name as string) + "-na-night";
}
if (!name || !module || !type) {
errorCode = 422;
throw new Error(
"Preencha corretamente os campos de name, start_date, end_date, module e type!"
);
}
if (!checkingStartDate) {
errorCode = 406;
throw new Error("Coloque a data de inicio no formato DD/MM/YYYY");
}
if (!checkingEndDate) {
errorCode = 406;
throw new Error("Coloque a data final no formato DD/MM/YYYY");
}
req.body.start_date = formatDate(start_date);
req.body.end_date = formatDate(end_date);
await insertClass(req.body);
res.status(201).send({ message: "Turma criada com sucesso." });
} catch (error) {
res.status(errorCode).send({ message: error.message });
}
}

async update(req: Request, res: Response) {
let errorCode: number = 404;
try {
const { id, module } = req.body;
if (!id || !module) {
errorCode = 422;
throw new Error(
"Preencha os campos do ID da turma e o número do módulo(1 a 7) para realizar a alteração."
);
}
(await changeClassModule(id, module)) as string;
res
.status(200)
.send({ message: "O módulo da turma foi alterado com sucesso!" });
} catch (error) {
res.status(errorCode).send({ message: error.message });
}
}
}

export { ClassController };
25 changes: 25 additions & 0 deletions src/controllers/ClassInfoController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Request, Response } from "express";
import { selectStudentByClass } from "../models/selectStudentByClass";

class ClassInfoController {
async show(req: Request, res: Response) {
let errorCode: number = 400;
try {
const { id } = req.params;
if (!id) {
errorCode = 404;
throw new Error("Insira um ID válido.");
}
const result = await selectStudentByClass(id);
if (!result.length) {
errorCode = 404;
throw new Error("Nenhum estudante está na turma!");
}
res.status(200).send({ message: result });
} catch (error) {
res.status(errorCode).send({ message: error.message });
}
}
}

export { ClassInfoController };
Loading