Skip to content

Commit 79168f8

Browse files
committed
id 검색 완료
1 parent 944c70a commit 79168f8

File tree

5 files changed

+101
-15
lines changed

5 files changed

+101
-15
lines changed

controller/userController.js

+23
Original file line numberDiff line numberDiff line change
@@ -158,5 +158,28 @@ module.exports = {
158158
return res.status(code.INTERNAL_SERVER_ERROR).send(util.fail(code.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR));
159159
}
160160
},
161+
// 아이디 검색하기
162+
getIdSearch: async (req, res) => {
163+
try {
164+
let {query, range} = req.query;
165+
166+
const user_id = req.decoded.id;
167+
168+
if (! query) {
169+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.NULL_VALUE));
170+
}
171+
if (! range) {
172+
range = 'all';
173+
}
174+
if (range != 'all' && range != 'follower' && range != 'followee') {
175+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.OUT_OF_VALUE));
176+
}
177+
const user = await userService.idSearch(query, range, user_id);
178+
return res.status(code.OK).send(util.success(code.OK, message.SEARCH_ID_SUCCESS, user));
179+
} catch (err) {
180+
console.error(err);
181+
return res.status(code.INTERNAL_SERVER_ERROR).send(util.fail(code.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR));
182+
}
183+
}
161184

162185
}

middleware/authUtil.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ const authUtil = {
2424
return res.status(statusCode.UNAUTHORIZED).send(util.fail(statusCode.UNAUTHORIZED, responseMessage.INVALID_TOKEN));
2525
}
2626
req.decoded = user;
27-
userService.updateVisit(user.id);
27+
const isValid = userService.updateVisit(user.id);
28+
if (! isValid) {
29+
return res.status(statusCode.UNAUTHORIZED).send(util.fail(statusCode.UNAUTHORIZED, responseMessage.INVALID_TOKEN));
30+
}
2831
next();
2932
}
3033
}

modules/responseMessage.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ module.exports = {
106106
UPDATE_MY_PROFILE_IMG_SUCCESS: "내 프로필 사진 변경 성공",
107107

108108
/* 검색 */
109-
SEARCH_ID_SUCCESS: "전체 아이디 검색 성공",
109+
SEARCH_ID_SUCCESS: "아이디 검색 성공",
110110
NO_USER_NICKNAME: "검색 결과가 없습니다",
111111

112112
/* 페이징 */

routes/users/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ const authUtil = require('../../middleware/authUtil');
77
router.post('/signup', upload.single('image'), userController.signup);
88
router.post('/signin', userController.signin);
99
router.get('/activities', authUtil.checkToken, userController.getActivity);
10+
router.get('/search', authUtil.checkToken, userController.getIdSearch)
1011

1112
module.exports = router;

service/userService.js

+72-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { User, Answer, Question } = require('../models');
1+
const { User, Answer, Question, Follow } = require('../models');
22
const message = require('../modules/responseMessage');
33
const crypto = require('crypto');
44
const moment = require('moment');
@@ -135,6 +135,10 @@ module.exports = {
135135
try {
136136
const today = await getTodayDatesOnly();
137137
const user = await User.findByPk(user_id);
138+
// user 가 없는 경우 경고
139+
if (! user) {
140+
return false;
141+
}
138142
let { last_visit, continued_visit } = user;
139143
last_visit = new Date(last_visit);
140144

@@ -157,7 +161,7 @@ module.exports = {
157161
}
158162
}
159163
);
160-
return changedNum;
164+
return true;
161165
} catch (err) {
162166
throw err;
163167
}
@@ -197,17 +201,72 @@ module.exports = {
197201
}
198202
},
199203
makeActivityPagination : async (activities, page) => {
200-
// 페이지 총 수
201-
const page_len = parseInt(activities.length / 20) + 1;
202-
203-
const idx_start = 0 + (page - 1) * 20;
204-
const idx_end = idx_start + 19;
205-
206-
// 페이지네이션
207-
activities = activities.filter((item, idx) => {
208-
return (idx >= idx_start && idx <= idx_end);
209-
})
210-
return {page_len, activities}
204+
try {
205+
// 페이지 총 수
206+
const page_len = parseInt(activities.length / 20) + 1;
207+
208+
const idx_start = 0 + (page - 1) * 20;
209+
const idx_end = idx_start + 19;
210+
211+
// 페이지네이션
212+
activities = activities.filter((item, idx) => {
213+
return (idx >= idx_start && idx <= idx_end);
214+
})
215+
return {page_len, activities}
216+
} catch (err) {
217+
throw err;
218+
}
211219
},
220+
idSearch: async (query, range, user_id) => {
221+
try {
222+
const user = await User.findOne({
223+
where : {
224+
nickname: query,
225+
},
226+
attributes: ['id', 'nickname', 'profile_img'],
227+
raw: true,
228+
});
229+
// 검색결과 없으면 null 반환
230+
if (! user) {
231+
return null;
232+
}
233+
// 팔로워 검색이면 내 팔로워가 맞는지 확인하기
234+
if (range == 'follower') {
235+
const isFollower = await Follow.findOne({
236+
where : {
237+
follower_id: user.id,
238+
followed_id: user_id,
239+
}
240+
});
241+
// 팔로워 아니면 Null 반환
242+
if (! isFollower) {
243+
return null;
244+
}
245+
} else if (range == 'followee') {
246+
const isFollowee = await Follow.findOne({
247+
where : {
248+
followed_id: user.id,
249+
follower_id: user_id,
250+
}
251+
});
252+
// 팔로이 아니면 null 반환
253+
if (! isFollowee) {
254+
return null;
255+
}
256+
}
257+
// user 객체 있으면 팔로우 했는 지 확인
258+
const is_followed = await Follow.findOne({
259+
where : {
260+
followed_id : user.id,
261+
follower_id : user_id,
262+
}
263+
});
264+
user.is_followed = Boolean(is_followed);
265+
266+
return user;
267+
} catch (err) {
268+
throw err;
269+
}
270+
}
212271

213272
}

0 commit comments

Comments
 (0)