박권수

feat. Manager Api Implements

1 const Router = require('koa-router'); 1 const Router = require('koa-router');
2 +const manageCtrl = require('./manage.ctrl');
2 3
3 const manage = new Router(); 4 const manage = new Router();
4 5
6 +/**
7 + * 의사 회원가입 요청을 한 회원들의 목록을 리턴
8 + * request parameter : null
9 + * url : http://localhost:4000/api/manage/doctor
10 + * return : doctor request List
11 + */
12 +manage.get('/doctor', manageCtrl.getDoctorRegReqList);
13 +
14 +/**
15 + * 의사 회원가입 요청을 한 특정 회원의 상세정보 확인
16 + * request parameter : doctor Id
17 + * url : http://localhost:4000/api/manage/doctor/:doctorId
18 + * return : doctor Info
19 + */
20 +manage.get('/doctor/:doctorId', manageCtrl.getDoctorRegReqDetail);
21 +
22 +/**
23 + * 의사 요청을 한 회원을 수락한다
24 + * request parameter : doctor Id
25 + * url : http://localhost:4000/api/manage/doctor/accept
26 + * return : null
27 + */
28 +manage.post('/doctor/accept', manageCtrl.acceptDoctorRegReq);
29 +
30 +/**
31 + * 의사 요청을 한 회원을 거절한다.
32 + * request parameter : doctor Id
33 + * url : http://localhost:4000/api/manange/doctor/reject
34 + * return : null
35 + */
36 +manage.post('/doctor/reject', manageCtrl.rejectDoctorRegReq);
37 +
5 38
6 module.exports = manage; 39 module.exports = manage;
...\ No newline at end of file ...\ No newline at end of file
......
1 +const User = require('../../models/user');
2 +const DoctorInfo = require('../../models/doctorInfo');
3 +const Profile = require('../../models/profile');
4 +
5 +/**
6 + * 의사 회원가입을 요청한 회원 리스트를 확인한다.
7 + * http methods : get
8 + * @param {*} ctx
9 + * @returns
10 + */
11 +exports.getDoctorRegReqList = async ctx => {
12 + const token = ctx.req.headers.authorization;
13 + if (!token || !token.length) {
14 + ctx.status = 401;
15 + return;
16 + }
17 +
18 + // eslint-disable-next-line no-undef
19 + const { userId } = jwt.verify(token, process.env.JWT_SECRET);
20 + const user = await User.findByUserId(userId);
21 + if(!user || user.userTypeCd !== 'MANAGER' || user.useYn !== 'Y') {
22 + ctx.status = 403;
23 + return;
24 + }
25 +
26 + try {
27 + const doctorRegReqList = await User.find({
28 + userTypeCd : 'DOCTOR',
29 + useYn : 'W',
30 + });
31 +
32 + ctx.status = 200;
33 + ctx.body = doctorRegReqList;
34 +
35 + } catch(e) {
36 + ctx.status = 500;
37 + ctx.body = {
38 + error : '알 수 없는 에러가 발생했습니다.',
39 + };
40 + console.log(e);
41 + }
42 +};
43 +
44 +/**
45 + * 의사 신청을 한 회원을 상세 조회한다.
46 + * http methods : get
47 + * @param {*} ctx
48 + * @returns
49 + */
50 +exports.getDoctorRegReqDetail = async ctx => {
51 + const token = ctx.req.headers.authorization;
52 + if (!token || !token.length) {
53 + ctx.status = 401;
54 + return;
55 + }
56 +
57 + // eslint-disable-next-line no-undef
58 + const { userId } = jwt.verify(token, process.env.JWT_SECRET);
59 + const user = await User.findByUserId(userId);
60 + if(!user || user.userTypeCd !== 'MANAGER' || user.useYn !== 'Y') {
61 + ctx.status = 403;
62 + return;
63 + }
64 +
65 + try {
66 + const { doctorId } = ctx.params;
67 + const doctor = await User.findOne({ userId : doctorId });
68 + if(!doctor) {
69 + ctx.status = 404;
70 + ctx.body = {
71 + error : '존재하지 않는 회원입니다.',
72 + };
73 + return;
74 + } else if(doctor.userTypeCd !== 'DOCTOR') {
75 + ctx.status = 400;
76 + ctx.body = {
77 + error : '의사로 가입된 회원이 아닙니다.',
78 + };
79 + return;
80 + } else if (doctor.useYn !== 'W') {
81 + ctx.status = 400;
82 + ctx.body = {
83 + error : '이미 의사로 가입된 회원입니다.',
84 + };
85 + return;
86 + }
87 +
88 + const doctorInfo = await DoctorInfo.findOne({ doctorId });
89 + if(!doctorInfo) {
90 + ctx.status = 404;
91 + ctx.body = {
92 + error : '의사 자격이 증명되지 않은 회원입니다.',
93 + };
94 + return;
95 + } else if(doctorInfo.useYn === 'Y') {
96 + ctx.status = 400;
97 + ctx.body = {
98 + error : '이미 의사 인증이 완료된 회원입니다.'
99 + };1
100 + return;
101 + } else if(doctorInfo.useYn === 'N') {
102 + ctx.status = 400;
103 + ctx.body = {
104 + error : '의사 인증이 거절된 회원입니다.',
105 + };
106 + return;
107 + }
108 +
109 + ctx.status = 200;
110 + ctx.body = doctorInfo;
111 +
112 + } catch (e) {
113 + ctx.status = 500;
114 + ctx.body = {
115 + error : '알 수 없는 에러가 발생했습니다.',
116 + };
117 + console.log(e);
118 + }
119 +};
120 +
121 +/**
122 + * 의사 요청이 온 회원을 수락한다.
123 + * http methods : post
124 + * @param {*} ctx
125 + * @returns
126 + */
127 +exports.acceptDoctorRegReq = async ctx => {
128 + const token = ctx.req.headers.authorization;
129 + if (!token || !token.length) {
130 + ctx.status = 401;
131 + return;
132 + }
133 +
134 + // eslint-disable-next-line no-undef
135 + const { userId } = jwt.verify(token, process.env.JWT_SECRET);
136 + const user = await User.findByUserId(userId);
137 + if(!user || user.userTypeCd !== 'MANAGER' || user.useYn !== 'Y') {
138 + ctx.status = 403;
139 + return;
140 + }
141 +
142 + try {
143 + const { doctorId } = ctx.request.body;
144 + const doctor = await User.findOne({ userId : doctorId });
145 + if(!doctor) {
146 + ctx.status = 404;
147 + ctx.body = {
148 + error : '존재하지 않는 회원입니다.',
149 + };
150 + return;
151 + } else if(doctor.useYn === 'N') {
152 + ctx.status = 400;
153 + ctx.body = {
154 + error : '탈퇴된 회원입니다.',
155 + };
156 + return;
157 + } else if(doctor.useYn === 'Y') {
158 + ctx.status = 400;
159 + ctx.body = {
160 + error : '이미 가입이 완료된 의사입니다.',
161 + };
162 + return;
163 + } else if(doctor.userTypeCd !== 'DOCTOR') {
164 + ctx.status = 400;
165 + ctx.body = {
166 + error : '의사로 가입된 회원이 아닙니다.',
167 + };
168 + return;
169 + }
170 +
171 + doctor.setUseYn('Y');
172 + doctor.save();
173 +
174 + ctx.status = 200;
175 +
176 + } catch(e) {
177 + ctx.status = 500;
178 + ctx.body = {
179 + error : '알 수 없는 에러가 발생했습니다.',
180 + };
181 + console.log(e);
182 + }
183 +};
184 +
185 +/**
186 + * 의사 요청이 온 회원을 거절한다.
187 + * http methods : post
188 + * @param {*} ctx
189 + * @returns
190 + */
191 + exports.rejectDoctorRegReq = async ctx => {
192 + const token = ctx.req.headers.authorization;
193 + if (!token || !token.length) {
194 + ctx.status = 401;
195 + return;
196 + }
197 +
198 + // eslint-disable-next-line no-undef
199 + const { userId } = jwt.verify(token, process.env.JWT_SECRET);
200 + const user = await User.findByUserId(userId);
201 + if(!user || user.userTypeCd !== 'MANAGER' || user.useYn !== 'Y') {
202 + ctx.status = 403;
203 + return;
204 + }
205 +
206 + try {
207 + const { doctorId } = ctx.request.body;
208 + const doctor = await User.findOne({ userId : doctorId });
209 + if(!doctor) {
210 + ctx.status = 404;
211 + ctx.body = {
212 + error : '존재하지 않는 회원입니다.',
213 + };
214 + return;
215 + } else if(doctor.useYn === 'N') {
216 + ctx.status = 400;
217 + ctx.body = {
218 + error : '탈퇴된 회원입니다.',
219 + };
220 + return;
221 + } else if(doctor.useYn === 'Y') {
222 + ctx.status = 400;
223 + ctx.body = {
224 + error : '이미 가입이 완료된 의사입니다.',
225 + };
226 + return;
227 + } else if(doctor.userTypeCd !== 'DOCTOR') {
228 + ctx.status = 400;
229 + ctx.body = {
230 + error : '의사로 가입된 회원이 아닙니다.',
231 + };
232 + return;
233 + }
234 +
235 + doctor.setUseYn('N');
236 + doctor.save();
237 +
238 + ctx.status = 200;
239 +
240 + } catch(e) {
241 + ctx.status = 500;
242 + ctx.body = {
243 + error : '알 수 없는 에러가 발생했습니다.',
244 + };
245 + console.log(e);
246 + }
247 +};
248 +