김채리

user detail update and more

...@@ -37,8 +37,14 @@ npm run dev:server ...@@ -37,8 +37,14 @@ npm run dev:server
37 ``` 37 ```
38 38
39 <br> 39 <br>
40 +
40 ### API reference 41 ### API reference
42 +
41 [Programming Quotes API](quotes.stormconsultancy.co.uk/random.json) 43 [Programming Quotes API](quotes.stormconsultancy.co.uk/random.json)
42 <br> 44 <br>
45 +
46 +[Trending-GitHub API](https://docs.trending-github.com/)
47 +
43 ### License 48 ### License
49 +
44 [MIT](https://choosealicense.com/licenses/mit/) 50 [MIT](https://choosealicense.com/licenses/mit/)
......
...@@ -47,8 +47,6 @@ const gitTrend = async (req, res) => { ...@@ -47,8 +47,6 @@ const gitTrend = async (req, res) => {
47 }; 47 };
48 }; 48 };
49 49
50 -
51 -
52 export const handleHome = async (req, res) => { 50 export const handleHome = async (req, res) => {
53 const quote = await getQuote(); 51 const quote = await getQuote();
54 const trend = await gitTrend(); 52 const trend = await gitTrend();
...@@ -73,37 +71,44 @@ export const handleHome = async (req, res) => { ...@@ -73,37 +71,44 @@ export const handleHome = async (req, res) => {
73 71
74 export const getUserDetail = async (req, res) => { 72 export const getUserDetail = async (req, res) => {
75 const quote = await getQuote(); 73 const quote = await getQuote();
74 + const id = req.params.id;
75 + const user = await User.findById(id);
76 + console.log(user.tech);
77 +
76 res.render("userDetail", { 78 res.render("userDetail", {
77 pagetTitle: "User Detail", 79 pagetTitle: "User Detail",
78 quote: quote.quote, 80 quote: quote.quote,
79 author: quote.author, 81 author: quote.author,
82 + user,
80 }); 83 });
81 }; 84 };
82 85
83 -export const getEditProfile = async (req,res)=> { 86 +export const getEditProfile = async (req, res) => {
84 - const{ 87 + const {
85 - user:{_id:id} 88 + user: { _id: id },
86 } = req; 89 } = req;
87 - try{ 90 + try {
88 const user = await User.findById(id); 91 const user = await User.findById(id);
89 - if(user.id !== id){ 92 + if (user.id !== id) {
90 throw Error(); 93 throw Error();
91 - } else{ 94 + } else {
92 - res.render("editProfile",{pageTitle:"Edit Profile", user}); 95 + res.render("editProfile", { pageTitle: "Edit Profile", user });
93 } 96 }
94 - }catch(error){ 97 + } catch (error) {
95 console.log(error); 98 console.log(error);
96 } 99 }
97 }; 100 };
98 101
99 -export const postEditProfile = async (req,res) =>{ 102 +export const postEditProfile = async (req, res) => {
100 const { 103 const {
101 - user:{_id:id}, 104 + user: { _id: id },
102 - body: {name, email, school, blogUrl, tech, career, introduction}, 105 + body: { name, email, school, blogUrl, tech, career, introduction },
103 - file 106 + file,
104 } = req; 107 } = req;
105 - try{ 108 + try {
106 - const updatedUser = await User.findByIdAndUpdate(id, { 109 + const updatedUser = await User.findByIdAndUpdate(
110 + id,
111 + {
107 avatarUrl: file ? file.path : req.session.passport.user.avatarUrl, 112 avatarUrl: file ? file.path : req.session.passport.user.avatarUrl,
108 name, 113 name,
109 email, 114 email,
...@@ -111,14 +116,16 @@ export const postEditProfile = async (req,res) =>{ ...@@ -111,14 +116,16 @@ export const postEditProfile = async (req,res) =>{
111 blogUrl, 116 blogUrl,
112 tech: User.formatTech(tech), 117 tech: User.formatTech(tech),
113 career: User.formatCareer(career), 118 career: User.formatCareer(career),
114 - introduction 119 + introduction,
115 }, 120 },
116 { 121 {
117 - new: true 122 + new: true,
118 - }); 123 + }
124 + );
119 req.session.passport.user = updatedUser; 125 req.session.passport.user = updatedUser;
126 + //console.log(updatedUser);
120 res.redirect("/users/edit-profile"); 127 res.redirect("/users/edit-profile");
121 - }catch(error){ 128 + } catch (error) {
122 console.log(error); 129 console.log(error);
123 res.redirect("/"); 130 res.redirect("/");
124 } 131 }
...@@ -151,24 +158,23 @@ export const githubLoginCallback = async (_, __, profile, done) => { ...@@ -151,24 +158,23 @@ export const githubLoginCallback = async (_, __, profile, done) => {
151 }, 158 },
152 } = profile; 159 } = profile;
153 160
154 - try{ 161 + try {
155 - const user = await User.findOne({githubId}); 162 + const user = await User.findOne({ githubId });
156 - if(user){ 163 + if (user) {
157 - user.githubId = githubId, 164 + (user.githubId = githubId), (user.githubName = githubName);
158 - user.githubName = githubName
159 await user.save(); 165 await user.save();
160 return done(null, user); 166 return done(null, user);
161 - }else{ 167 + } else {
162 const newUser = await User.create({ 168 const newUser = await User.create({
163 githubId, 169 githubId,
164 githubName, 170 githubName,
165 avatarUrl, 171 avatarUrl,
166 name, 172 name,
167 - email 173 + email,
168 }); 174 });
169 return done(null, newUser); 175 return done(null, newUser);
170 } 176 }
171 - }catch(error){ 177 + } catch (error) {
172 return done(error); 178 return done(error);
173 } 179 }
174 }; 180 };
......
...@@ -3,53 +3,52 @@ import mongoose from "mongoose"; ...@@ -3,53 +3,52 @@ import mongoose from "mongoose";
3 const UserSchema = new mongoose.Schema({ 3 const UserSchema = new mongoose.Schema({
4 name: { 4 name: {
5 type: String, 5 type: String,
6 - trim: true 6 + trim: true,
7 }, 7 },
8 email: { 8 email: {
9 type: String, 9 type: String,
10 trim: true, 10 trim: true,
11 - unique: true 11 + unique: true,
12 }, 12 },
13 avatarUrl: String, 13 avatarUrl: String,
14 githubId: { 14 githubId: {
15 type: Number, 15 type: Number,
16 - required: "GitHub id is required", 16 + required: "GitHub ID is required",
17 - unique: true 17 + unique: true,
18 }, 18 },
19 githubName: { 19 githubName: {
20 type: String, 20 type: String,
21 required: "Github nickname is required", 21 required: "Github nickname is required",
22 - trim: true 22 + trim: true,
23 }, 23 },
24 school: { 24 school: {
25 type: String, 25 type: String,
26 - trim: true 26 + trim: true,
27 }, 27 },
28 tech: [{ type: String, trim: true }], 28 tech: [{ type: String, trim: true }],
29 career: [{ type: String, trim: true }], 29 career: [{ type: String, trim: true }],
30 - introduction: { type: String, maxLength: 500}, 30 + introduction: { type: String, maxLength: 500 },
31 createdAt: { 31 createdAt: {
32 type: Date, 32 type: Date,
33 - default: Date.now 33 + default: Date.now,
34 }, 34 },
35 blogUrl: { 35 blogUrl: {
36 type: String, 36 type: String,
37 - default: "#" 37 + default: "#",
38 }, 38 },
39 githubUrl: { 39 githubUrl: {
40 type: String, 40 type: String,
41 - default: "#" 41 + default: "#",
42 - } 42 + },
43 }); 43 });
44 44
45 -UserSchema.static("formatTech", function(tech){ 45 +UserSchema.static("formatTech", function (tech) {
46 return tech.split(","); 46 return tech.split(",");
47 }); 47 });
48 -UserSchema.static("formatCareer",function(career){ 48 +UserSchema.static("formatCareer", function (career) {
49 return career.split(","); 49 return career.split(",");
50 }); 50 });
51 51
52 const User = mongoose.model("User", UserSchema); 52 const User = mongoose.model("User", UserSchema);
53 53
54 -
55 export default User; 54 export default User;
......
1 import express from "express"; 1 import express from "express";
2 -import { getEditProfile, getUserDetail, handleUsers, postEditProfile } from "../controllers/userController"; 2 +import {
3 + getEditProfile,
4 + getUserDetail,
5 + handleUsers,
6 + postEditProfile,
7 +} from "../controllers/userController";
3 import { onlyPrivate, uploadFiles } from "../middlewares"; 8 import { onlyPrivate, uploadFiles } from "../middlewares";
4 9
5 const userRouter = express.Router(); 10 const userRouter = express.Router();
...@@ -7,7 +12,12 @@ const userRouter = express.Router(); ...@@ -7,7 +12,12 @@ const userRouter = express.Router();
7 userRouter.get("/", handleUsers); 12 userRouter.get("/", handleUsers);
8 13
9 userRouter.get("/edit-profile", onlyPrivate, getEditProfile); 14 userRouter.get("/edit-profile", onlyPrivate, getEditProfile);
10 -userRouter.post("/edit-profile", onlyPrivate, uploadFiles.single("photo"),postEditProfile); 15 +userRouter.post(
16 + "/edit-profile",
17 + onlyPrivate,
18 + uploadFiles.single("photo"),
19 + postEditProfile
20 +);
11 21
12 userRouter.get("/:id", getUserDetail); 22 userRouter.get("/:id", getUserDetail);
13 23
......
...@@ -11,23 +11,41 @@ block content ...@@ -11,23 +11,41 @@ block content
11 img(src="#") 11 img(src="#")
12 .user-profile__link 12 .user-profile__link
13 a(href="#") Github 13 a(href="#") Github
14 + |#{' '}
14 a(href="#") Blog 15 a(href="#") Blog
15 .user-profile__column 16 .user-profile__column
16 .user-profile__info 17 .user-profile__info
17 - h3 NAME 18 + h3(style="display: inline;") NAME:
18 - h3 GITHUB NICKNAME 19 + h4(style="display: inline;")=user.name
19 - h3 EMAIL 20 + br
20 - h3 SCHOOL 21 + h3(style="display: inline;") GITHUB NICKNAME:
21 - h3 TECH 22 + h4(style="display: inline;")=user.githubName
22 - h3 CAREER 23 + br
23 - h3 SELF-INTRODUCTION 24 + h3(style="display: inline;") EMAIL:
25 + h4(style="display: inline;")=user.email
26 + br
27 + h3(style="display: inline;") SCHOOL:
28 + h4(style="display: inline;")=user.school
29 + h3 TECH:
30 + ul
31 + each tech in user.tech
32 + li=tech
33 + h3 CAREER:
34 + ul
35 + each career in user.career
36 + li=career
37 + h3(style="display: inline;") SELF-INTRODUCTION:
38 + h4(style="display: inline;")=user.introduction
24 hr 39 hr
25 .user-status 40 .user-status
26 .user-status__contributions 41 .user-status__contributions
27 - img(src="http://ghchart.rshah.org/lsj8706" alt="Name Your Github chart") 42 + img(src=`http://ghchart.rshah.org/${user.githubName}` alt="Name Your Github chart")
28 .user-status__character 43 .user-status__character
29 h3 Your step | commit numbers 44 h3 Your step | commit numbers
30 img(src="https://preview.free3d.com/img/2019/12/2269306250288170045/1oe8ymrc-900.jpg" alt="character" style="height:200px; width:250px;") 45 img(src="https://preview.free3d.com/img/2019/12/2269306250288170045/1oe8ymrc-900.jpg" alt="character" style="height:200px; width:250px;")
31 .user-repositories 46 .user-repositories
32 .user-repo 47 .user-repo
33 h3 REPO 1 48 h3 REPO 1
49 +
50 +
51 +
...\ No newline at end of file ...\ No newline at end of file
......