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
43 changes: 43 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,46 @@
1. Fidelidade às instruções e ao cenário.
2. Clean Code e boas práticas.
3. Boas práticas de versionamento.

## Tecnologias utilizadas:

- **Express**
- **TypeScript**
- **Cors**
- **Axios**
- **Banco Postgress**
- **Docker**
- **uuidv4**
- **JWT**
- **bcryptjs**
- **TypeORM**
- **Material-UI**
- **react-bootstrap**

## Comandos Projeto
- Rodar comando yarn(tanto no front quanto no back)
> Para baixar as dependecias.

- Rodando servidor yarn dev
> Para iniciar o servidor NodeJS.

- Rodando servidor yarn start
> Para iniciar o servidor React.js.

## Ajustes
- Ajustar o arquivo ormconfig.json com as configurações do Docker
- Ajustar Secret e ExpireIn em src\config\auth.js

~~~JSON
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "user",
"password": "password",
"database": "database_name",

jwt: {
secret: 'SECRET',
expiresIn: 'EXPIRES_IN'
}
~~~
14 changes: 14 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# dependencies
/node_modules

# misc
.DS_Store
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
21 changes: 21 additions & 0 deletions backend/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"protocol": "inspector",
"restart": true,
"name": "Debug",
"skipFiles": [
"<node_internals>/**"
],
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}
17 changes: 17 additions & 0 deletions backend/ormconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "docker",
"database": "edtech-postgres",
"entities": [
"./src/models/*.ts"
],
"migrations": [
"./src/database/migrations/*.ts"
],
"cli": {
"migrationsDir": "./src/database/migrations"
}
}
30 changes: 30 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "backend",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"build": "tsc",
"dev:server": "ts-node-dev --inspect --transpile-only --ignore-watch node-modules src/server.ts",
"start": "ts-node-dev src/server.ts",
"typeorm": "ts-node-dev ./node_modules/typeorm/cli.js"
},
"dependencies": {
"@types/cors": "^2.8.10",
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"pg": "^8.6.0",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.2.32",
"uuidv4": "^6.2.8"
},
"devDependencies": {
"@types/bcryptjs": "^2.4.2",
"@types/express": "^4.17.11",
"@types/jsonwebtoken": "^8.5.1",
"ts-node-dev": "^1.1.6",
"typescript": "^4.2.4"
}
}
7 changes: 7 additions & 0 deletions backend/src/@types/express.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
declare namespace Express {
export interface Request {
user: {
id: string;
}
}
}
6 changes: 6 additions & 0 deletions backend/src/config/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
jwt: {
secret: 'af299fae2402115031e975b65d350631',
expiresIn: '7d'
}
}
3 changes: 3 additions & 0 deletions backend/src/database/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { createConnection } from 'typeorm';

createConnection();
49 changes: 49 additions & 0 deletions backend/src/database/migrations/1621813452690-CreateUsers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {MigrationInterface, QueryRunner, Table} from "typeorm";

export default class CreateUsers1621813452690 implements MigrationInterface {

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'users',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'uuid_generate_v4()',
},
{
name: 'name',
type: 'varchar',
},
{
name: 'email',
type: 'varchar',
isUnique: true,
},
{
name: 'password',
type: 'varchar',
},
{
name: 'created_at',
type: 'timestamp',
default: 'now()',
},
{
name: 'updated_at',
type: 'timestamp',
default: 'now()',
},
],
}),
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('users');
}

}
58 changes: 58 additions & 0 deletions backend/src/database/migrations/1621828117047-CreateCourses.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import {MigrationInterface, QueryRunner, Table} from "typeorm";

export class CreateCourses1621828117047 implements MigrationInterface {

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'courses',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'uuid_generate_v4()',
},
{
name: 'name',
type: 'varchar',
},
{
name: 'teachers',
type: 'varchar',
isArray: true,
},
{
name: 'rooms',
type: 'varchar',
isArray: true,
},
{
name: 'initialHour',
type: 'varchar',
},
{
name: 'finalHour',
type: 'varchar',
},
{
name: 'created_at',
type: 'timestamp',
default: 'now()',
},
{
name: 'updated_at',
type: 'timestamp',
default: 'now()',
},
],
}),
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('courses');
}

}
42 changes: 42 additions & 0 deletions backend/src/middleware/ensureAthenticated.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import {Request, Response, NextFunction} from 'express';
import {verify} from 'jsonwebtoken'
import authConfig from '../config/auth'

interface TokenPayload {
iat: number;
exp: number;
sub: string;
}

export default function ensureAuthenticated(
request: Request,
response: Response,
next: NextFunction
): void{
const authHeader = request.headers.authorization;

if (!authHeader) {
throw new Error('Token não enviado.')
}

const [,token] = authHeader.split(' ');

try{
const decoded = verify(token, authConfig.jwt.secret);

const {sub} = decoded as TokenPayload;

request.user = {
id: sub,
}

console.log(decoded);

return next();
} catch {
throw new Error('Token invalido.')
}



}
36 changes: 36 additions & 0 deletions backend/src/models/Course.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {
Entity,
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from 'typeorm';

@Entity('courses')
class Course {
@PrimaryGeneratedColumn('uuid')
id: string;

@Column()
name: string;

@Column("simple-array")
teachers: string[];

@Column("simple-array")
rooms: string[];

@Column()
initialHour: string;

@Column()
finalHour: string;

@CreateDateColumn()
created_at: Date;

@UpdateDateColumn()
updated_at: Date;
}

export default Course;
30 changes: 30 additions & 0 deletions backend/src/models/User.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import {
Entity,
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from 'typeorm';

@Entity('users')
class User {
@PrimaryGeneratedColumn('uuid')
id: string;

@Column()
name: string;

@Column()
email: string;

@Column()
password: string;

@CreateDateColumn()
created_at: Date;

@UpdateDateColumn()
updated_at: Date;
}

export default User;
Loading