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
6,020 changes: 6,020 additions & 0 deletions modulo6/arquitetura-software-2/package-lock.json

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions modulo6/arquitetura-software-3/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
package-lock.json
build
.env
35 changes: 35 additions & 0 deletions modulo6/arquitetura-software-3/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "arquitetura-software-2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/node": "^18.6.2",
"@types/uuid": "^8.3.4",
"accepts": "^1.3.8",
"anymatch": "^3.1.2",
"arg": "^4.1.3"

},
"devDependencies": {
"@types/knex": "^0.16.1",
"@types/mysql": "^2.15.21",
"knex": "^2.2.0",
"mysql": "^2.18.1",
"ts-node-dev": "^2.0.0",
"typescript": "^4.7.4"
},
"scripts": {
"dev": "clear && ts-node-dev ./src/index.ts",
"start": "tsc && node ./build/index.js",
"test": "echo \"Error: no test specified\" && exit 1"

},
"keywords": [],
"author": "",
"license": "ISC"
}


15 changes: 15 additions & 0 deletions modulo6/arquitetura-software-3/queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-- Active: 1658871330862@@35.226.146.116@3306@gebru-4211824-helaine-ribeiro
CREATE TABLE LABEFLIX_USER (
id VARCHAR(255) PRIMARY KEY,
name VARCHAR(255) NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);

CREATE TABLE LABEFLIX_MOVIE (
id VARCHAR(255) PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
duration_in_minutes INT NOT NULL,
year_of_release INT NOT NULL
);
21 changes: 21 additions & 0 deletions modulo6/arquitetura-software-3/request.rest
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
POST http://localhost:3003/user/create
Content-Type: application/json

{
"name": "teste4",
"email": "teste4@email.com",
"password": "111222"
}

###
POST http://localhost:3003/movie/createMovie
Content-Type: application/json

{
"title": "endpoint4",
"description": "testando endpoint4",
"durationInMinutes": 85,
"yearOfRelease": 36
}


11 changes: 11 additions & 0 deletions modulo6/arquitetura-software-3/src/app.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import express from 'express'
import cors from 'cors'

export const app = express()

app.use(express.json())
app.use(cors())

app.listen(3003, () => {
console.log("Servidor rodando na 3003")
})
37 changes: 37 additions & 0 deletions modulo6/arquitetura-software-3/src/business/MovieBusiness.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { MovieDatabase } from "../data/MovieDatabase"
import { CustomError } from "../error/CustomError";
//import { v4 as generateId } from 'uuid'
import { generateId } from "../services/generateId";
import { Movie } from "../model/Movie"
import { MovieInputDTO } from "../model/movieDTO"
import { MovieRepository } from "./MovieRepository";

export class MovieBusiness {
constructor(private movieDatabase:MovieRepository){}

createMovie = async (input: MovieInputDTO) => {

try{

const {title,description,durationInMinutes,yearOfRelease} = input

if (!title || !description || !durationInMinutes || !yearOfRelease) {

throw new Error("Dados inválidos (title,description,duration_in_minutes,year_of_release)")
}


const id = generateId()

//const movieDatabase = new MovieDatabase()

const movie = new Movie(id, title,description,durationInMinutes,yearOfRelease)

await this.movieDatabase.createMovie(movie)

} catch (error:any) {
throw new CustomError(error.message || error.sqlMessage, error.statusCode);
}
};
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { Movie } from "../model/Movie"


export interface MovieRepository {
createMovie(movie: Movie):Promise<void>
}
48 changes: 48 additions & 0 deletions modulo6/arquitetura-software-3/src/business/UserBusiness.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { UserDatabase } from "../data/UserDatabase"
import { CustomError, InvalidName } from "../error/CustomError";
//import { v4 as generateId } from 'uuid'
import { generateId } from "../services/generateId";
import { User } from "../model/User"
import { UserInputDTO } from "../model/userDTO"
import { UserRepository } from "./UserRepository";
import { InvalidEmail } from "../error/InvalidEmail";

export class UserBusiness {
constructor(private UserDatabase:UserRepository){}

create = async(input: UserInputDTO)=> {
try {

const {email,name,password} = input

if (!email || !name || !password) {
throw new CustomError(400,"Dados inválidos (email, name, password)")
}

if (name.length < 4) {
throw new InvalidName();
}

if (!email.includes("@")) {
throw new InvalidEmail();
}

const id = generateId()



//const userDatabase = new UserDatabase()

const user = new User(id,name,email,password)

await this.UserDatabase.create(user)

} catch (error:any) {
throw new CustomError(error.message || error.sqlMessage, error.statusCode);
}

}

}


5 changes: 5 additions & 0 deletions modulo6/arquitetura-software-3/src/business/UserRepository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { User } from "../model/User"

export interface UserRepository {
create(user: User): Promise<void>
}
32 changes: 32 additions & 0 deletions modulo6/arquitetura-software-3/src/controller/MovieController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Request, Response } from "express";
import { MovieBusiness } from "../business/MovieBusiness";
import { CustomError } from "../error/CustomError";
import { MovieInputDTO } from "../model/movieDTO";

export class MovieController {

constructor(private movieBusiness:MovieBusiness){}

createMovie = async(req: Request, res: Response)=> {
try {
const { title,description,durationInMinutes,yearOfRelease } = req.body;

const input: MovieInputDTO ={
title,
description,
durationInMinutes,
yearOfRelease
}

//const movieBusiness = new MovieBusiness();

await this.movieBusiness.createMovie(input);

res.status(201).send({ message: "filme cadastrado com sucesso" });

} catch (error:any) {
throw new CustomError(error.message || error.sqlMessage, error.statusCode);
}
}
}

28 changes: 28 additions & 0 deletions modulo6/arquitetura-software-3/src/controller/UserController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Request, Response } from "express";
import { UserBusiness } from "../business/UserBusiness";
import { CustomError } from "../error/CustomError";
import { UserInputDTO } from "../model/userDTO";

export class UserController {
constructor(private userBusiness: UserBusiness){}

create = async (req: Request, res: Response)=> {

try {
const { email, name, password } = req.body;

const input: UserInputDTO ={
email, name, password
}

//const userBusiness = new UserBusiness();

await this.userBusiness.create(input);

res.status(201).send({ message: "Usuário cadastrado com sucesso" });
} catch (error:any) {
throw new CustomError(error.message || error.sqlMessage, error.statusCode);
}
}
}

20 changes: 20 additions & 0 deletions modulo6/arquitetura-software-3/src/data/BaseDatabase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import knex from 'knex'
import dotenv from 'dotenv'

dotenv.config()

export abstract class BaseDatabase {

protected static connection = knex({
client: "mysql",
connection: {
host: process.env.DB_HOST ,
port: 3306,
user: process.env.DB_USER ,
password: process.env.DB_PASSWORD ,
database: process.env.DB_SCHEMA ,
}
})
}


44 changes: 44 additions & 0 deletions modulo6/arquitetura-software-3/src/data/MovieDatabase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Movie } from "../model/Movie";
import { BaseDatabase } from "./BaseDatabase";


export class MovieDatabase extends BaseDatabase {
private static TABLE_NAME = "LABEFLIX_MOVIE";

async createMovie(movie: Movie): Promise<void> {

await MovieDatabase.connection
.insert({
id: movie.getId(),
title: movie.getTitle(),
description: movie.getDescription(),
duration_in_minutes: movie.getDurationInMinutes(),
year_of_release: movie.getYearOfRelease()
})
.into(MovieDatabase.TABLE_NAME);
}
}


/* export class MovieDatabase extends BaseDatabase {
private static TABLE_NAME = "LABEFLIX_MOVIE";

public createMovie = async (movie: Movie)=>{
try {
await MovieDatabase.connection(MovieDatabase.TABLE_NAME)
.insert({
id: movie.getId,
title: movie.getTitle,
description: movie.getDescription,
duration_in_minutes: movie.getDurationInMinutes,
year_of_release: movie.getYearOfRelease

})
} catch (error:any) {
throw new Error(error.message)
}
}

} */


17 changes: 17 additions & 0 deletions modulo6/arquitetura-software-3/src/data/UserDatabase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { User } from "../model/User";
import { BaseDatabase } from "./BaseDatabase";

export class UserDatabase extends BaseDatabase {
private static TABLE_NAME = "LABEFLIX_USER";

async create(user: User): Promise<void> {
await UserDatabase.connection
.insert({
id: user.getId(),
name: user.getName(),
email: user.getName(),
password: user.getPassword(),
})
.into(UserDatabase.TABLE_NAME);
}
}
33 changes: 33 additions & 0 deletions modulo6/arquitetura-software-3/src/error/CustomError.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
export class CustomError extends Error {
constructor(
statusCode: number,
message: string

) {
super(message)
}
}

/* export class CustomError extends Error {
constructor(statusCode: number, message: string){
super(message)
}
} */

export class InvalidName extends CustomError{
constructor(){
super(400, "Nome inválido")
}
}

export class InvalidEmail extends CustomError{
constructor(){
super(400, "Email inválido")
}
}

export class InvalidPassword extends CustomError{
constructor(){
super(400, "Senha inválida")
}
}
7 changes: 7 additions & 0 deletions modulo6/arquitetura-software-3/src/error/InvalidEmail.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { CustomError } from "./CustomError";

export class InvalidEmail extends CustomError {
constructor(){
super( 400,"email inválido")
}
}
7 changes: 7 additions & 0 deletions modulo6/arquitetura-software-3/src/error/InvalidRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { CustomError } from "./CustomError";

export class InvalidRequest extends CustomError {
constructor(){
super(400,"Requisição inválida, um ou mais campos vazios")
}
}
Loading