OSDN Git Service

プロファイルの日付表示方法を変更した
[webchat/WebChat.git] / profile.js
1 $db_user = "user";\r
2 $db_password = "user";\r
3 $db_limit = 50;\r
4 \r
5 $unmatch_password = "パスワードが一致しません";\r
6 $invaild_parameter = "パラメーターが正しくありません";\r
7 $success_registor = "登録に成功しました";\r
8 $success_remove = "削除に成功しました";\r
9 $success_edit = "編集に成功しました";\r
10 $notfound_name = "該当名が存在しません";\r
11 \r
12 var util = require("util");\r
13 var async = require("async");\r
14 var security = require("./security.js");\r
15 var ejs = require("ejs");\r
16 require("date-utils");\r
17 \r
18 var collection = new ProfileCollection();\r
19 \r
20 module.exports = function(app){\r
21         app.get("/profile",list_proc);\r
22         app.get("/profile/detail",detail_proc);\r
23         app.post("/profile/detail",detail_postproc);\r
24         app.post("/profile/edit",edit_postproc); \r
25         app.get("/profile/registor",registor_proc); \r
26         app.post("/profile/registor",registor_postproc); \r
27 };\r
28 \r
29 function list_proc(req, res)\r
30 {\r
31         var limit = $db_limit;\r
32         var start = 0;\r
33         var parttern = "";\r
34         if(typeof(req.query.start) != "undefined")\r
35                 start = parseInt(req.query.start);\r
36         if(typeof(req.query.limit) != "undefined")\r
37                 limit = parseInt(req.query.limit);\r
38 \r
39         async.waterfall([\r
40                 function(cb){\r
41                         if(typeof(req.query.search) != "undefined")\r
42                         {\r
43                                 parttern = req.query.search;\r
44                                 collection.FindByNameAsync(parttern,start,limit,cb);\r
45                         }else{\r
46                                 collection.ToArrayAsync(start,limit,cb);\r
47                         }\r
48                 }\r
49         ],function(err,result){\r
50                 if(err != null){\r
51                         res.render("profile\\message",{message:err});\r
52                 }else{\r
53                         var next = start + limit;\r
54                         var prev = start - limit;\r
55                         if(prev < 0)\r
56                                 prev = 0;\r
57                         result[0].lastmodified = result[0].lastmodified.toFormat("YYYY/MM/DD HH:MI:SS");\r
58                         res.render("profile\\list",{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
59                 }\r
60         });\r
61 }\r
62 \r
63 function detail_proc(req, res)\r
64 {\r
65         if(typeof(req.query.name) == "undefined")\r
66         {\r
67                 res.render("profile\\message",{message:$invaild_parameter});\r
68                 return;\r
69         }\r
70 \r
71         var info = new security.SessionInfomation(false);\r
72         req.session.items = info;\r
73 \r
74         async.waterfall([\r
75                 function(cb){\r
76                         collection.GetAsync(req.query.name,cb);\r
77                 },\r
78         ],function(err,result){\r
79                 if(err != null)\r
80                         res.render("profile\\message",{message:err});\r
81                 else if(result.length == 0)\r
82                         res.render("profile\\message",{message:$notfound_name});\r
83                 else{\r
84                         res.render("profile\\detail",{list:result,token:info.token});\r
85                 }\r
86         });\r
87 }\r
88 \r
89 function detail_postproc(req, res)\r
90 {\r
91         if(req.session.items.token != req.body.token){\r
92                 res.render("profile\\message",{message:$invaild_parameter});\r
93                 return;\r
94         }\r
95         if(typeof(req.body.remove) != "undefined"){\r
96                 async.waterfall([\r
97                         function(cb){\r
98                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
99                         },\r
100                         function(result,cb){\r
101                                 if(result)\r
102                                         collection.RemoveAsync(req.body.name,cb);\r
103                                 else\r
104                                         cb(null,null);\r
105                         }\r
106                 ],function(err,result){\r
107                         if(err != null)\r
108                                 res.render("profile\\message",{message:err});\r
109                         else if(result == null)\r
110                                 res.render("profile\\message",{message:$unmatch_password});\r
111                         else\r
112                                 res.render("profile\\message",{message:$success_remove});\r
113                 });\r
114         }else if(typeof(req.body.edit) != "undefined"){\r
115                 async.waterfall([\r
116                         function(cb){\r
117                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
118                         },\r
119                         function(result,cb){\r
120                                 if(result)\r
121                                         collection.GetAsync(req.body.name,cb);\r
122                                 else\r
123                                         cb(null,null);\r
124                         }\r
125                 ],function(err,result){\r
126                         if(err != null){\r
127                                 res.render("profile\\message",{message:err});\r
128                         }else if(result != null){\r
129                                 res.render("profile\\edit",{list:result,token:req.body.token});\r
130                         }else{\r
131                                 res.render("profile\\message",{message:$unmatch_password});\r
132                         }\r
133                 });\r
134         }else{\r
135                 res.render("profile\\message",{message:$invaild_parameter});\r
136         }\r
137 }\r
138 \r
139 function edit_postproc(req, res)\r
140 {\r
141         if(req.session.items.token != req.body.token){\r
142                 res.render("profile\\message",{message:$invaild_parameter});\r
143                 return;\r
144         }\r
145         if(typeof(req.body.name) == "undefined")\r
146         {\r
147                 res.render("profile\\message",{message:$invaild_parameter});\r
148                 return;\r
149         }else if(typeof(req.body.edit) != "undefined"){\r
150                 async.waterfall([\r
151                         function(cb){\r
152                                 collection.UpdatAsync(req.body.name,req.body,cb);\r
153                         }\r
154                 ],function(err,result){\r
155                         if(err != null)\r
156                                 res.render("profile\\message",{message:err});\r
157                         else\r
158                                 res.render("profile\\message",{message:$success_edit});\r
159                 });\r
160         }else{\r
161                 res.render("profile\\message",{message:$invaild_parameter});\r
162         }\r
163 }\r
164 \r
165 function registor_postproc(req, res)\r
166 {\r
167         if(req.session.items.token != req.body.token){\r
168                 res.render("profile\\message",{message:$invaild_parameter});\r
169                 return;\r
170         }\r
171         if(typeof(req.body.registor) != "undefined"){\r
172                 async.waterfall([\r
173                         function(cb){\r
174                                 collection.AddAsync(req.body,cb);\r
175                         }\r
176                 ],function(err,result){\r
177                         if(err != null)\r
178                                 res.render("profile\\message",{message:err});\r
179                         else\r
180                                 res.render("profile\\message",{message:$success_registor});\r
181                 });\r
182         }else{\r
183                 res.render("profile\\message",{message:$invaild_parameter});\r
184         }\r
185 }\r
186 function registor_proc(req, res)\r
187 {\r
188         var info = new security.SessionInfomation(false);\r
189         req.session.items = info;\r
190 \r
191         res.render("profile\\registor",{token:info.token});\r
192 }\r
193 \r
194 //\r
195 // ProfileCollectionクラス\r
196 //\r
197 function ProfileCollection()\r
198 {\r
199         var pool = new MySQLPool();\r
200         this.AuthAsync = function(name,password,cb){\r
201                 async.waterfall([\r
202                         function(callback){\r
203                                 pool.acquire(callback);\r
204                         },\r
205                         function(client,callback){\r
206                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
207                                         callback(err,result,client);\r
208                                 });\r
209                         },\r
210                         function(result,client,callback){\r
211                                 pool.release(client);\r
212                                 if(result[0].password == password)\r
213                                         callback(null,true);\r
214                                 else\r
215                                         callback(null,false);\r
216                         }\r
217                 ],cb);\r
218         }\r
219         this.GetAsync = function(name,cb){\r
220                 async.waterfall([\r
221                         function(callback){\r
222                                 pool.acquire(callback);\r
223                         },\r
224                         function(client,callback){\r
225                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
226                                         callback(err,result,client);\r
227                                 });\r
228                         },\r
229                         function(result,client,callback){\r
230                                 pool.release(client);\r
231                                 callback(null,result);\r
232                         }\r
233                 ],cb);\r
234         }\r
235         this.AddAsync = function(data,cb){\r
236                 var item = {\r
237                         name:data.name,\r
238                         age:data.age,\r
239                         gender:data.gender,\r
240                         height:data.height,\r
241                         weight:data.weight,\r
242                         race:data.race,\r
243                         password:data.password,\r
244                         lastmodified:new Date(),\r
245                         etc:data.etc\r
246                 };\r
247                 async.waterfall([\r
248                         function(callback){\r
249                                 pool.acquire(callback);\r
250                         },\r
251                         function(client,callback){\r
252                                 client.query("INSERT INTO list SET ?",[item],function(err,result){\r
253                                         callback(err,result,client);\r
254                                 });\r
255                         },\r
256                         function(result,client,callback){\r
257                                 pool.release(client);\r
258                                 callback(null,result);\r
259                         }\r
260                 ],cb);\r
261         }\r
262         this.UpdatAsync = function(name,data,cb){\r
263                 var item = {\r
264                         name:data.name,\r
265                         age:data.age,\r
266                         gender:data.gender,\r
267                         height:data.height,\r
268                         weight:data.weight,\r
269                         race:data.race,\r
270                         password:data.password,\r
271                         lastmodified:new Date(),\r
272                         etc:data.etc\r
273                 };\r
274                 async.waterfall([\r
275                         function(callback){\r
276                                 pool.acquire(callback);\r
277                         },\r
278                         function(client,callback){\r
279                                 client.query("UPDATE list SET ? WHERE name = ?",[item,name],function(err,result){\r
280                                         callback(err,result,client);\r
281                                 });\r
282                         },\r
283                         function(result,client,callback){\r
284                                 pool.release(client);\r
285                                 callback(null,result);\r
286                         }\r
287                 ],cb);\r
288         }\r
289         this.RemoveAsync = function(name,cb){\r
290                 async.waterfall([\r
291                         function(callback){\r
292                                 pool.acquire(callback);\r
293                         },\r
294                         function(client,callback){\r
295                                 client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
296                                         callback(err,result,client);\r
297                                 });\r
298                         },\r
299                         function(result,client,callback){\r
300                                 pool.release(client);\r
301                                 callback(null,result);\r
302                         }\r
303                 ],cb);\r
304         }\r
305         this.FindByNameAsync = function(pattern,start,count,cb){\r
306                 async.waterfall([\r
307                         function(callback){\r
308                                 pool.acquire(callback);\r
309                         },\r
310                         function(client,callback){\r
311                                 client.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],function(err,result){\r
312                                         callback(err,result,client);\r
313                                 });\r
314                         },\r
315                         function(result,client,callback){\r
316                                 pool.release(client);\r
317                                 callback(null,result);\r
318                         }\r
319                 ],cb);\r
320         }\r
321         this.ToArrayAsync = function(start,count,cb){\r
322                 async.waterfall([\r
323                         function(callback){\r
324                                 pool.acquire(callback);\r
325                         },\r
326                         function(client,callback){\r
327                                 client.query("SELECT * FROM list LIMIT ?,?",[start,count],function(err,result){\r
328                                         callback(err,result,client);\r
329                                 });\r
330                         },\r
331                         function(result,client,callback){\r
332                                 pool.release(client);\r
333                                 callback(null,result);\r
334                         }\r
335                 ],cb);\r
336         }\r
337 }\r
338 \r
339 function MySQLPool()\r
340 {\r
341         var generic_pool = require("generic-pool");\r
342         var mysql      = require("mysql");\r
343         return generic_pool.Pool({\r
344                 name : "mysql",\r
345                 max : 10,\r
346                 create : function(cb){\r
347                         var connection = mysql.createConnection({\r
348                                 host     : "localhost",\r
349                                 user     : $db_user,\r
350                                 password : $db_password,\r
351                                 database : "profile",\r
352                         });\r
353                         connection.connect();\r
354                         cb(null,connection);\r
355                 },\r
356                 destroy : function(db){\r
357                         db.end();\r
358                 }\r
359         });\r
360 }\r