-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
166 lines (146 loc) · 4.63 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// require start
const express = require("express");
const cors = require("cors");
const jwt = require("jsonwebtoken");
const { MongoClient, ServerApiVersion, ObjectId } = require("mongodb");
require("dotenv").config();
const app = express();
const port = process.env.PORT || 5000;
// require end
// middlewares start
app.use(cors());
app.use(express.json());
// middlewares end
// mongo DB connect API start
const uri = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@cluster0.2ahck7i.mongodb.net/?retryWrites=true&w=majority`;
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
serverApi: ServerApiVersion.v1,
});
// JWT token start
const verifyJWT = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) {
res.status(401).send({ message: "Unauthorized User" });
}
const token = authHeader.split(" ")[1];
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, function (error, decoded) {
if (error) {
res.status(401).send({ message: "Unauthorized User" });
}
req.decoded = decoded;
});
next();
};
// JWT token end
// mongo DB run function start
const run = async () => {
const servicesCollection = client.db("khaiyalamuDB").collection("services");
const reviewsCollection = client.db("khaiyalamuDB").collection("reviews");
// Get Data 3 services From Mongo DB start
app.get("/limitedServices", async (req, res) => {
const query = {};
const cursor = servicesCollection.find(query);
const services = await cursor.limit(3).toArray();
res.send(services);
});
// Get Data 3 services From Mongo DB end
// all services From Mongo DB start
app.get("/services", async (req, res) => {
const query = {};
const cursor = servicesCollection.find(query);
const services = await cursor.toArray();
res.send(services);
});
// all services From Mongo DB end
// add a new service API start
app.post("/service", async (req, res) => {
const serviceInfo = req.body;
const result = await servicesCollection.insertOne(serviceInfo);
res.send(result);
});
// add a new service API end
// one service by id API from mongo DB start
app.get("/services/:id", async (req, res) => {
const id = req.params.id;
const query = { _id: ObjectId(id) };
const service = await servicesCollection.findOne(query);
res.send(service);
});
// one service by id API from mongo DB end
// review post API start
app.post("/reviews", async (req, res) => {
const review = req.body;
const result = await reviewsCollection.insertOne(review);
res.send(result);
});
// review post API end
// review get API start
app.get("/reviews", async (req, res) => {
const userEmail = req.query.email;
let query = {};
if (userEmail) {
query = { useremail: userEmail };
}
const options = {
sort: { createdTime: -1 },
};
const cursor = reviewsCollection.find(query, options);
const reviews = await cursor.toArray();
res.send(reviews);
});
// review get API end
// single review get API start
app.get("/reviews/:id", async (req, res) => {
const id = req.params.id;
let query = { _id: ObjectId(id) };
const review = await reviewsCollection.findOne(query);
res.send(review);
});
// single review get API end
// delete review API start
app.delete("/reviews/:id", async (req, res) => {
const id = req.params.id;
const query = { _id: ObjectId(id) };
const result = await reviewsCollection.deleteOne(query);
res.send(result);
});
// delete review API end
// update review API start
app.patch("/reviews/:id", async (req, res) => {
const id = req.params.id;
const filter = { _id: ObjectId(id) };
const previousReview = req.body;
const updatedReview = {
$set: {
review: previousReview.review,
username: previousReview.username,
photoURL: previousReview.photoURL,
useremail: previousReview.useremail,
ratings: previousReview.ratings,
},
};
const result = await reviewsCollection.updateOne(filter, updatedReview);
res.send(result);
});
// update review API end
// JWT API start
app.post("/jwt", (req, res) => {
const user = req.body;
const token = jwt.sign(user, process.env.ACCESS_TOKEN_SECRET, {
expiresIn: "1h",
});
res.send({ token });
});
// JWT API end
};
run().catch((error) => console.error(error));
// mongo DB run function end
// mongo DB connect API end
app.use("/", (req, res) => {
res.send("khaiyalamu server is running!!!");
});
app.listen(port, () => {
console.log(`khaiyalamu server is running on port ${port}`);
});