Skip to content

Commit 47da253

Browse files
authored
Video-19-Connect-To-MongoDB (basir#19)
1 parent 566a582 commit 47da253

File tree

6 files changed

+155
-3
lines changed

6 files changed

+155
-3
lines changed

README.md

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,10 @@ JS AMAZONA
124124
6. style .details and all columns
125125
7. create add to cart button with add-button id
126126
15. Product Screen Action
127-
128127
1. after_render() to add event to the button
129128
2. add event handler for the button
130129
3. redirect user to cart/:product_id
131130
4. implement after_render in index.js
132-
133131
16. Add To Cart Action
134132
1. create CartScreen.js
135133
2. parseRequestUrl
@@ -165,3 +163,97 @@ JS AMAZONA
165163
13. setCartItems( getCartItems().filter)
166164
14. if id === parseRequestUrl().id? redirect to '/cart'
167165
15. else rerender(CartScreen);
166+
19. Connect To MongoDB and Create Admin User
167+
1. npm install mongoose
168+
2. connect to mongodb
169+
3. create config.js
170+
4. npm install dotenv
171+
5. export MONGODB_URL
172+
6. create models/userModel.js
173+
7. create userSchema and userModel
174+
8. create userRoute
175+
9. create createadmin route
176+
20. Sign-in Screen UI
177+
2. create SigninScreen
178+
3. render email and password fields
179+
4. style signin form
180+
21. Sign-in Screen Action
181+
1. after_render handle form submit
182+
2. create signin request in frontend
183+
3. create signin api in backend
184+
22. Create Header Component
185+
1. update index.html
186+
1. add header render and after render to router function
187+
1. show header menu based on user logged in or not
188+
23. Register Screen Action
189+
1. after_render handle form submit
190+
2. create register request in frontend
191+
3. create register api in backend
192+
24. Create Checkout Wizard Header Component
193+
1. create component
194+
2. style component
195+
25. Shipping Screen
196+
1. create ShippingScreen.js
197+
2. style elements
198+
3. handle form submit
199+
26. Payment Screen
200+
1. create PaymentScreen.js
201+
2. style elements
202+
3. handle form submit
203+
27. PlaceOrder Screen UI
204+
1. create PlaceOrder.js
205+
2. style elements
206+
28. PlaceOrder Screen Action
207+
1. handle form submit
208+
2. create backend api to create order
209+
29. Order Screen
210+
1. create OrderScreen.js
211+
2. style elements
212+
30. PayPal Payment
213+
1. add paypal checkout script
214+
2. show paypal button
215+
3. update order after payment
216+
31. User Profile UI
217+
1. create ProfileScreen.js
218+
2. style elements
219+
32. User Profile Data
220+
1. Create profile info backend api
221+
2. Create user orders api
222+
3. Call apis in the backend
223+
33. Update Profile
224+
1. handle form submit
225+
2. send request to backend
226+
3. create api to update profile
227+
34. Admin Products UI
228+
1. create Admin Order menu in header
229+
2. create ProductListScreen.js
230+
3. show products with edit and delete button
231+
4. show create product button
232+
5. implement create product backend
233+
6. redirect user to edit product screen
234+
35. Edit Product
235+
1. create ProductListScreen.js
236+
2. load product data from backend
237+
3. handle form submit
238+
4. save product in backend
239+
36. Delete Product
240+
1. update ProductListScreen.js
241+
2. handle delete button
242+
3. rerender after deletion
243+
37. Admin Orders
244+
1. create Admin Order menu in header
245+
2. create AdminOrder.js
246+
3. load orders from backend
247+
4. list them in the screen
248+
5. show delete and edit button
249+
6. redirect to order details on edit action
250+
38. Edit Order
251+
1. if order is payed show deliver button for admin
252+
2. handle click on deliver button
253+
3. set state to delivered
254+
39. Delete Order
255+
1. update OrderListScreen.js
256+
2. handle delete button
257+
3. rerender after deletion
258+
40. Publish heroku
259+
1. publish steps

backend/config.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import dotenv from 'dotenv';
2+
3+
dotenv.config();
4+
5+
export default {
6+
MONGODB_URL: process.env.MONGODB_URL,
7+
};

backend/models/userModel.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import mongoose from 'mongoose';
2+
3+
const userSchema = new mongoose.Schema({
4+
name: { type: String, required: true },
5+
email: {
6+
type: String,
7+
required: true,
8+
index: true,
9+
unique: true,
10+
},
11+
password: { type: String, required: true },
12+
isAdmin: { type: Boolean, required: true, default: false },
13+
});
14+
const User = mongoose.model('User', userSchema);
15+
export default User;

backend/routers/userRouter.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import express from 'express';
2+
import User from '../models/userModel';
3+
4+
const userRouter = express.Router();
5+
6+
userRouter.get('/createadmin', async (req, res) => {
7+
try {
8+
const user = new User({
9+
name: 'admin',
10+
email: 'admin@example.com',
11+
password: 'jsamazona',
12+
isAdmin: true,
13+
});
14+
const createdUser = await user.save();
15+
res.send(createdUser);
16+
} catch (err) {
17+
res.status(500).send({ message: err.message });
18+
}
19+
});
20+
export default userRouter;

backend/server.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
11
import express from 'express';
22
import cors from 'cors';
3+
import mongoose from 'mongoose';
34
import data from './data';
5+
import config from './config';
6+
import userRouter from './routers/userRouter';
47

8+
mongoose
9+
.connect(config.MONGODB_URL, {
10+
useNewUrlParser: true,
11+
useUnifiedTopology: true,
12+
useCreateIndex: true,
13+
})
14+
.then(() => {
15+
console.log('Connected to mongodb.');
16+
})
17+
.catch((error) => {
18+
console.log(error.reason);
19+
});
520
const app = express();
621
app.use(cors());
22+
app.use('/api/users', userRouter);
723
app.get('/api/products', (req, res) => {
824
res.send(data.products);
925
});

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
"homepage": "https://github.com/basir/node-javascript-ecommerce#readme",
2020
"dependencies": {
2121
"cors": "^2.8.5",
22-
"express": "^4.17.1"
22+
"dotenv": "^8.2.0",
23+
"express": "^4.17.1",
24+
"mongoose": "^5.9.21"
2325
},
2426
"devDependencies": {
2527
"@babel/cli": "^7.10.3",

0 commit comments

Comments
 (0)