박기범

add contact function

...@@ -15,6 +15,7 @@ var folderRouter = require('./routes/folders'); ...@@ -15,6 +15,7 @@ var folderRouter = require('./routes/folders');
15 var quickRouter = require('./routes/quick'); 15 var quickRouter = require('./routes/quick');
16 var favoritesRouter = require('./routes/favorites'); 16 var favoritesRouter = require('./routes/favorites');
17 var shareRouter = require('./routes/share'); 17 var shareRouter = require('./routes/share');
18 +var contactRouter = require('./routes/contact');
18 19
19 20
20 var passport = require('passport'); 21 var passport = require('passport');
...@@ -67,6 +68,7 @@ app.use('/api/share', shareRouter); ...@@ -67,6 +68,7 @@ app.use('/api/share', shareRouter);
67 //app.use('/users', usersRouter); 68 //app.use('/users', usersRouter);
68 app.use('/api/file', fileRouter); 69 app.use('/api/file', fileRouter);
69 app.use('/api/quick', quickRouter); 70 app.use('/api/quick', quickRouter);
71 +app.use('/api/contact', contactRouter);
70 72
71 // catch 404 and forward to error handler 73 // catch 404 and forward to error handler
72 app.use(function(req, res, next) { 74 app.use(function(req, res, next) {
...@@ -84,4 +86,4 @@ app.use(function(err, req, res, next) { ...@@ -84,4 +86,4 @@ app.use(function(err, req, res, next) {
84 res.render('error'); 86 res.render('error');
85 }); 87 });
86 88
87 -module.exports = app;
...\ No newline at end of file ...\ No newline at end of file
89 +module.exports = app;
......
1 +var express = require('express');
2 +var router = express.Router();
3 +const XLSX = require('xlsx');
4 +var multer = require('multer');
5 +var fs = require('fs');
6 +var xl = require('excel4node');
7 +// var pool = require('./../routes/modules/database');
8 +
9 +//파일 저장위치와 파일이름 설정
10 +var storage = multer.diskStorage({
11 + destination: function (req, file, cb) {
12 + cb(null, 'public/upload');
13 + },
14 + //파일이름 설정
15 + filename: function (req, file, cb) {
16 + cb(null, file.originalname);
17 + }
18 +})
19 +
20 +//파일 업로드 모듈
21 +var upload = multer({ storage: storage })
22 +
23 +// 연락처 백업, 삭제, 검색
24 +/*
25 +contact_upload : 연락처 파일 업로드 모듈
26 +input : 사용자가 연락처를 저장해놓은 csv 혹은 xlsx 파일
27 +output : 연락처 저장 성공 여부
28 +*/
29 +router.post('/contact_upload', upload.single('file'), function(req, res, next) {
30 + // console.log(req);
31 + var user_id = req.query.id;
32 + var file = req.file;
33 + var workbook = XLSX.readFile('public/upload/contact.xlsx');
34 + var firstWSheetName = workbook.SheetNames[0];
35 + var firstWSheet = workbook.Sheets[firstWSheetName];
36 + var name = [];
37 + var phone = [];
38 + var email = [];
39 + var added_date = [];
40 + var length = firstWSheet['!ref'][4];
41 + var temp ="";
42 +
43 + var sqlquery = "insert into contact(user_id,name,email,phone,added_date) values";
44 + for(var i=1;i<length;i++)
45 + {
46 + for(var j=0;j<4;j++)
47 + {
48 + if(j==0){
49 + temp = "A" + (i+1);
50 + name.push(firstWSheet[temp].v);
51 + sqlquery += ' ("' + user_id + '","'+name[i-1];
52 + }
53 + else if(j==1){
54 + temp = "B" + (i+1);
55 + phone.push(firstWSheet[temp].v);
56 + sqlquery += '","' + phone[i-1];
57 + }
58 + else if(j==2){
59 + temp = "C" + (i+1);
60 + email.push(firstWSheet[temp].v);
61 + sqlquery += '","' + email[i-1];
62 + }
63 + else if(j==3){
64 + temp = "D" + (i+1);
65 + added_date.push(firstWSheet[temp].v);
66 + sqlquery += '","' + added_date[i-1] + '"),';
67 + }
68 + }
69 + }
70 + sqlquery = sqlquery.substring(0,sqlquery.length-1);
71 + connection.query(sqlquery, function (err, rows) {
72 + if (err) {
73 + console.log("upload contact failed");
74 + throw err;
75 + } else {
76 + console.log(rows);
77 + var filename = 'public/upload/contact.xlsx';
78 + fs.unlink(filename, function (err) {
79 + if (err) throw err;
80 + console.log('file deleted');
81 + })
82 + res.status(200).send('upload');
83 + }
84 + });
85 +});
86 +
87 +/*
88 +contact_download : 연락처 파일 다운로드 모듈
89 +input : 사용자의 연락처 다운로드 요청
90 +output : 연락처 다운로드 성공 여부 및 csv, xlsx 파일
91 +*/
92 +router.post('/contact_download', function(req, res, next) {
93 +
94 + var filename = 'public/upload/contactdownload.xlsx';
95 + fs.exists(filename, function (exists) {
96 + console.log(exists);
97 + if(exists == true)
98 + {
99 + fs.unlink(filename, function (err) {
100 + if (err) throw err;
101 + console.log('file deleted');
102 + });
103 + }
104 + });
105 +
106 + // Create a new instance of a Workbook class
107 + var wb = new xl.Workbook();
108 +
109 + // Add Worksheets to the workbook
110 + var ws = wb.addWorksheet('Sheet 1');
111 +
112 + ws.cell(1, 1)
113 + .string('name');
114 + ws.cell(1, 2)
115 + .string('phone');
116 + ws.cell(1, 3)
117 + .string('email');
118 + ws.cell(1, 4)
119 + .string('added_date');
120 +
121 + var user_id = req.query.id;
122 + var sqlquery = "SELECT * FROM contact WHERE user_id = ?";
123 + connection.query(sqlquery, [user_id], function (err, rows) {
124 + if (err) {
125 + console.log("download contact failed");
126 + throw err;
127 + } else {
128 + if(rows.length != 0)
129 + {
130 + for(var i=0;i<rows.length;i++)
131 + {
132 + ws.cell(i+2, 1).string(rows[i].name);
133 + ws.cell(i+2, 2).string(rows[i].phone);
134 + ws.cell(i+2, 3).string(rows[i].email);
135 + ws.cell(i+2, 4).string(rows[i].added_date);
136 + }
137 + }
138 + wb.write('public/upload/contactdownload.xlsx');
139 + var file = __dirname + '/public/upload/contactdownload.xlsx';
140 + // console.log(file);
141 + res.download(file);
142 + }
143 +
144 + });
145 +});
146 +
147 +/*
148 +contact_create : 연락처 생성 모듈
149 +input : 사용자의 연락처 생성 요청
150 +output : 연락처 생성 성공 여부
151 +사용자한테 연락처 정보 받아오기
152 +*/
153 +router.get('/contact_create', function(req, res, next) {
154 + //insert into contact(name) value ("daso")
155 +});
156 +
157 +/*
158 +contact_delete : 연락처 삭제 모듈
159 +input : 사용자의 연락처 삭제 요청
160 +output : 연락처 삭제 성공 여부
161 +*/
162 +router.post('/contact_delete', function(req, res, next) {
163 + // console.log("req.query",req.query);
164 + var user_id = req.query.id;
165 + var sqlquery = "DELETE FROM contact WHERE user_id = ?";
166 + connection.query(sqlquery, [user_id], function (err, rows) {
167 + if (err) {
168 + console.log("delete contact failed");
169 + throw err;
170 + } else {
171 + // console.log(rows);s
172 + res.status(200).send("delete");
173 + }
174 +
175 + });
176 +});
177 +
178 +/*
179 +contact_search : 연락처 검색 모듈
180 +input : 사용자가 이름, 전화번호, 이메일 중 하나를 검색
181 +output : 검색을 요청한 데이터에 부합하는 연락처를 찾았다면 출력
182 +*/
183 +router.post('/contact_search', function(req, res, next) {
184 + console.log("req.query",req.query);
185 + var user_id = req.query.id;
186 + var type = req.query.type;
187 + var info = "";
188 + if(type == "name")
189 + {
190 + info = req.query.name;
191 + var sqlquery = "SELECT * FROM contact WHERE user_id = ? and name = ?";
192 + }
193 + else if(type == "phone")
194 + {
195 + info = req.query.phone;
196 + var sqlquery = "SELECT * FROM contact WHERE user_id = ? and phone = ?";
197 + }
198 + else if(type == "email")
199 + {
200 + info = req.query.email;
201 + var sqlquery = "SELECT * FROM contact WHERE user_id = ? and email = ?";
202 + }
203 + console.log(sqlquery);
204 + connection.query(sqlquery, [user_id,info], function (err, rows) {
205 + if (err) {
206 + console.log("search contact failed");
207 + throw err;
208 + } else {
209 + console.log(rows);
210 + res.status(200).send({contact_list : rows});
211 + }
212 +
213 + });
214 +});
215 +
216 +/*
217 +contact_list : 연락처 출력 모듈
218 +input : 사용자의 연락처 출력 요청
219 +output : 저장된 연락처 목록 출력
220 +*/
221 +router.post('/contact_list', function(req, res, next) {
222 + console.log("req.query",req.query);
223 + var user_id = req.query.id;
224 + var sqlquery = "SELECT * FROM contact WHERE user_id = ?";
225 + connection.query(sqlquery, [user_id], function (err, rows) {
226 + if (err) {
227 + console.log("select contact failed");
228 + throw err;
229 + } else {
230 + console.log(rows);
231 + res.status(200).send({contact_list : rows});
232 + }
233 +
234 + });
235 +});
236 +
237 +
238 +module.exports = router;