Skip to content

Commit 160be77

Browse files
committed
fix(webscoket)
1 parent 9ddc740 commit 160be77

26 files changed

+1033
-51
lines changed

README.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
3+
#Chat App
4+
5+
Stack:
6+
7+
- Angular
8+
9+
- Ionic
10+
11+
- GraphQL
12+
13+
- ApolloServer and ApolloClient
14+
15+
16+
17+
![Video](https://youtu.be/ICd11dVxm68)
18+
19+
20+
21+
![Screenshot from 2021-02-22 15-30-24](/home/pedro/Pictures/Screenshot from 2021-02-22 15-30-24.png)
22+

backend/.env

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PRIVATE_KEY=CHAVETOPZONA

backend/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@
1010
"author": "",
1111
"license": "ISC",
1212
"dependencies": {
13+
"@types/bcrypt": "^3.0.0",
14+
"@types/jsonwebtoken": "^8.5.0",
1315
"apollo-server": "^2.21.0",
16+
"bcrypt": "^5.0.0",
17+
"dotenv": "^8.2.0",
1418
"graphql": "^15.5.0",
19+
"jsonwebtoken": "^8.5.1",
1520
"mongoose": "^5.11.17"
1621
},
1722
"devDependencies": {

backend/schema.graphql

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
type User {
22
id: ID!
33
name: String!
4-
email: String!,
4+
email: String!
5+
senha: String!
6+
token: String
57
}
68

79
type Message {
@@ -20,8 +22,14 @@ type Subscription {
2022
messageSent: Message
2123
}
2224

25+
input LoginInput {
26+
email: String!
27+
senha: String!
28+
}
29+
2330
type Mutation {
24-
createUser(name: String!, email: String!): User
31+
createUser(name: String!, email: String!, senha: String!): User
2532
deleteUser(id: ID!): User
2633
sendMessage(userID: ID!, content: String!): Message
34+
login(login: LoginInput): User
2735
}

backend/src/resolvers.ts

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import User from './schemas/Users';
22
import Message from './schemas/Message';
3+
import bcrypt from 'bcrypt';
4+
import jwt from 'jsonwebtoken';
5+
import dotenv from 'dotenv';
36
import { IResolvers, PubSub } from 'apollo-server';
47

58
const pubsub = new PubSub();
69
const CHAT_CHANNEL = 'CHAT_CHANNEL';
710

11+
dotenv.config();
12+
813
const resolvers: IResolvers = {
914
Query: {
1015
users: () => User.find(),
@@ -15,8 +20,32 @@ const resolvers: IResolvers = {
1520
},
1621

1722
Mutation: {
18-
createUser: (_, { name, email }) => User.create({ name, email }),
23+
createUser: async (_, { name, email, senha }) => {
24+
const encryptedPassword = await bcrypt.hash(senha, 10);
25+
26+
return User.create({
27+
name,
28+
email,
29+
senha: encryptedPassword
30+
});
31+
},
1932
deleteUser: (_, { id }) => User.remove(id),
33+
login: async (_, { login }) => {
34+
const { email, senha } = login;
35+
36+
const result = await User.findOne({ email });
37+
38+
39+
if (result && bcrypt.compare(senha, result.senha)) {
40+
const token = jwt.sign({ id: result._id }, process.env.PRIVATE_KEY as string);
41+
42+
return {
43+
id: result.id,
44+
token
45+
};
46+
}
47+
return null;
48+
},
2049
sendMessage: async (_, { userID, content }) => {
2150
// Busca o usuário por id
2251
const user = await User.findById(userID);

backend/src/schemas/Users.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import {model, Schema} from 'mongoose';
22

33
const UserSchema = new Schema({
44
name: String,
5-
email: String,
5+
email: {
6+
type: String,
7+
unique: true
8+
},
9+
senha: String,
610
});
711

812
export default model('User', UserSchema);

0 commit comments

Comments
 (0)