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
4 changes: 4 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.env
package-lock.json
build
node_modules
1 change: 1 addition & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# desafio-GM-back
28 changes: 28 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/desafio-gm.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
create table postagem(
id varchar(255) primary key,
mensagem varchar(255) not null
);

create table comentarios(
id varchar(255) primary key,
comentario varchar(255) not null,
id_postagem varchar(255),
foreign key (id_postagem) references postagem(id) on delete cascade
);

create table curtida(
id varchar(255) primary key,
curtir int not null,
id_postagem varchar(255),
foreign key (id_postagem) references postagem(id) on delete cascade
);

insert into postagem values ("001", "Oi, tudo bem? Eu sou um teste");
insert into postagem values ("002", "Oi, tudo bem? Eu sou o teste 2");

select * from postagem;


select * from comentarios;


38 changes: 38 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "back",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "ts-node-dev ./src/index.ts",
"start": "node ./build/index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "tsc"
},
"engines": {
"node": "v16.14.1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"ts-node-dev": "^2.0.0",
"typescript": "^4.7.4"
},
"dependencies": {
"@types/bcryptjs": "^2.4.2",
"@types/jsonwebtoken": "^8.5.8",
"@types/knex": "^0.16.1",
"@types/uuid": "^8.3.4",
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^16.0.1",
"express": "^4.18.1",
"jsonwebtoken": "^8.5.1",
"knex": "^2.1.0",
"mysql": "^2.18.1",
"uuid": "^8.3.2"
}
}
26 changes: 26 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/request.rest
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
GET http://localhost:3003/posts
Content-Type: application/json


###

POST http://localhost:3003/posts
Content-Type: application/json

{
"mensagem": "Teste para ser deletado"
}

###
DELETE http://localhost:3003/posts/1657168602764
Content-Type: application/json

###


POST http://localhost:3003/posts/001/comment
Content-Type: application/json

{
"comentario": "comentario teste postman de novo"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

import { connection } from "..";
import { posts } from "../types";


const typeMensagem = (mensagem:any) =>{
const createMensagem :posts={
id:mensagem.id,
mensagem:mensagem.mensagem
}
return createMensagem
}
export default async function deletePostById(id:string):Promise<void>{
try {
await connection("postagem")
.del()
.where({id})
} catch (error:any) {
throw new Error (error.sqlMessage)
}

}


Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { connection } from "..";
import { comentario, posts } from "../types";

export default async function insertComment(comment:comentario):Promise<string>{

await connection("comentarios")
.insert(comment)


return "Post feito com sucesso"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { connection } from "..";
import { posts } from "../types";

export default async function insertPosts(insertPosts:posts):Promise<string>{

const {id, mensagem} = insertPosts
await connection("postagem")
.insert({
id,
mensagem
})


return "Post feito com sucesso"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { connection } from "..";
import { posts } from "../types";


const typeMensagem = (mensagem:any) =>{
const createMensagem :posts={
id:mensagem.id,
mensagem:mensagem.mensagem
}
return createMensagem
}
export default async function selectAllPosts():Promise<posts[] | undefined>{

const result = await connection("postagem")

const allMensagemType = result.map((mensagem)=>{
return typeMensagem(mensagem)
})

console.log(allMensagemType)
return result
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

import { connection } from "..";
import { posts } from "../types";


const typeMensagem = (mensagem:any) =>{
const createMensagem :posts={
id:mensagem.id,
mensagem:mensagem.mensagem
}
return createMensagem
}
export default async function selectPostById(id:string):Promise<posts | undefined>{

const result = await connection("postagem")
.select("*")
.where({id})

const allMensagemType = result.map((mensagem)=>{
return typeMensagem(mensagem)
})

console.log(allMensagemType)
return allMensagemType[0]
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Request, Response } from "express";
import insertComment from "../data/insertComment";
import insertPosts from "../data/insertPosts";
import { comentario, comentarioInput, } from "../types";

export default async function createComment(req:Request, res:Response){
try {
const {comentario:text}:comentarioInput = req.body
const {id} = req.params

if(!text){
throw new Error ("O campo de mensagem deve ser preenchido")
}

const commentInsert:comentario = {
id: Date.now().toString(),
comentario:text,
id_postagem:id
}

const answer = await insertComment(commentInsert)

res.status(201).send({message:answer})

} catch (error:any) {
res.status(500).send({message:error.message})

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Request, Response } from "express";
import insertPosts from "../data/insertPosts";
import { posts, postsInput } from "../types";

export default async function createPost(req:Request, res:Response){
try {
const {mensagem}:postsInput = req.body

if(!mensagem){
throw new Error ("O campo de mensagem deve ser preenchido")
}

const postsInsert:posts = {
id: Date.now().toString(),
mensagem
}

const answer = await insertPosts(postsInsert)

res.status(201).send({message:answer})

} catch (error:any) {
res.status(500).send({message:error.message})

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Request, Response } from "express";
import { connection } from "..";
import deletePostById from "../data/deletePostById";
import selectPostById from "../data/selectPostById";

export default async function deletePosts(req:Request, res:Response):Promise<void>{
try {
const { id } = req.params

const checkPost = await selectPostById(id)

if(!checkPost){
throw new Error ("Esse Id não existe")
}

await deletePostById(id)

res.status(200).send("Detelado com sucesso")

} catch (error: any) {
if (res.statusCode === 200) {
res.status(500).send({ message: error.message });
} else {
res.status(res.statusCode).send({ message: error.sqlMessage || error.message });
}

}
}

// await connection()
// .delete()
// .from("postagem")
// .where({ id })
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Request, Response } from "express";
import selectAllPosts from "../data/selectAllPosts";

export default async function getPosts(req:Request, res:Response){
try {

const allPosts = await selectAllPosts()

if(!allPosts?.length){
throw new Error ("Não há nenhum Post")
}

res.status(200).send(allPosts)
} catch (error:any) {
res.status(500).send({message:error.message})
}
}

44 changes: 44 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// no index.ts:

import express, { Express } from "express";
import knex from "knex";
import cors from "cors";
import dotenv from "dotenv";
import { AddressInfo } from "net";
import getPosts from "./endpoints/getPosts";
import deletePosts from "./endpoints/deletePosts";
import createPost from "./endpoints/createPosts";
import createComment from "./endpoints/createComment";

dotenv.config();

export const 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,
multipleStatements: true
}
});

const app: Express = express();
app.use(express.json());
app.use(cors());

app.get("/posts", getPosts)
app.post("/posts", createPost)
app.delete("/posts/:id", deletePosts)
app.post("/posts/:id/comment", createComment)


const server = app.listen(process.env.PORT || 3003, () => {
if (server) {
const address = server.address() as AddressInfo;
console.log(`Server is running in http://localhost: ${address.port}`);
} else {
console.error(`Failure upon starting server.`);
}
});
18 changes: 18 additions & 0 deletions modulo6/Rodada-cases-semana1/desafio-morada-back/src/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export type posts = {
id:string,
mensagem:string
}

export type postsInput = {
mensagem:string
}

export type comentario = {
id:string,
comentario:string,
id_postagem:string
}

export type comentarioInput = {
comentario:string
}
Loading