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 \r
14 var async = require("async");\r
15 \r
16 var security = require("./security.js");\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                         res.render("profile\\list",{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
58                 }\r
59         });\r
60 }\r
61 \r
62 function detail_proc(req, res)\r
63 {\r
64         if(typeof(req.query.name) == "undefined")\r
65         {\r
66                 res.render("profile\\message",{message:$invaild_parameter});\r
67                 return;\r
68         }\r
69 \r
70         var info = new security.SessionInfomation(false);\r
71         req.session.items = info;\r
72 \r
73         async.waterfall([\r
74                 function(cb){\r
75                         collection.GetAsync(req.query.name,cb);\r
76                 },\r
77         ],function(err,result){\r
78                 if(err != null)\r
79                         res.render("profile\\message",{message:err});\r
80                 else if(result.length == 0)\r
81                         res.render("profile\\message",{message:$notfound_name});\r
82                 else\r
83                         res.render("profile\\detail",{list:result,token:info.token});\r
84         });\r
85 }\r
86 \r
87 function detail_postproc(req, res)\r
88 {\r
89         if(req.session.items.token != req.body.token){\r
90                 res.render("profile\\message",{message:$invaild_parameter});\r
91                 return;\r
92         }\r
93         if(typeof(req.body.remove) != "undefined"){\r
94                 async.waterfall([\r
95                         function(cb){\r
96                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
97                         },\r
98                         function(result,cb){\r
99                                 if(result)\r
100                                         collection.RemoveAsync(req.body.name,cb);\r
101                                 else\r
102                                         cb(null,null);\r
103                         }\r
104                 ],function(err,result){\r
105                         if(err != null)\r
106                                 res.render("profile\\message",{message:err});\r
107                         else if(result == null)\r
108                                 res.render("profile\\message",{message:$unmatch_password});\r
109                         else\r
110                                 res.render("profile\\message",{message:$success_remove});\r
111                 });\r
112         }else if(typeof(req.body.edit) != "undefined"){\r
113                 async.waterfall([\r
114                         function(cb){\r
115                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
116                         },\r
117                         function(result,cb){\r
118                                 if(result)\r
119                                         collection.GetAsync(req.body.name,cb);\r
120                                 else\r
121                                         cb(null,null);\r
122                         }\r
123                 ],function(err,result){\r
124                         if(err != null){\r
125                                 res.render("profile\\message",{message:err});\r
126                         }else if(result != null){\r
127                                 res.render("profile\\edit",{list:result,token:req.body.token});\r
128                         }else{\r
129                                 res.render("profile\\message",{message:$unmatch_password});\r
130                         }\r
131                 });\r
132         }else{\r
133                 res.render("profile\\message",{message:$invaild_parameter});\r
134         }\r
135 }\r
136 \r
137 function edit_postproc(req, res)\r
138 {\r
139         if(req.session.items.token != req.body.token){\r
140                 res.render("profile\\message",{message:$invaild_parameter});\r
141                 return;\r
142         }\r
143         if(typeof(req.body.name) == "undefined")\r
144         {\r
145                 res.render("profile\\message",{message:$invaild_parameter});\r
146                 return;\r
147         }else if(typeof(req.body.edit) != "undefined"){\r
148                 async.waterfall([\r
149                         function(cb){\r
150                                 collection.UpdatAsync(req.body.name,req.body,cb);\r
151                         }\r
152                 ],function(err,result){\r
153                         if(err != null)\r
154                                 res.render("profile\\message",{message:err});\r
155                         else\r
156                                 res.render("profile\\message",{message:$success_edit});\r
157                 });\r
158         }else{\r
159                 res.render("profile\\message",{message:$invaild_parameter});\r
160         }\r
161 }\r
162 \r
163 function registor_postproc(req, res)\r
164 {\r
165         if(req.session.items.token != req.body.token){\r
166                 res.render("profile\\message",{message:$invaild_parameter});\r
167                 return;\r
168         }\r
169         if(typeof(req.body.registor) != "undefined"){\r
170                 async.waterfall([\r
171                         function(cb){\r
172                                 collection.AddAsync(req.body,cb);\r
173                         }\r
174                 ],function(err,result){\r
175                         if(err != null)\r
176                                 res.render("profile\\message",{message:err});\r
177                         else\r
178                                 res.render("profile\\message",{message:$success_registor});\r
179                 });\r
180         }else{\r
181                 res.render("profile\\message",{message:$invaild_parameter});\r
182         }\r
183 }\r
184 function registor_proc(req, res)\r
185 {\r
186         var info = new security.SessionInfomation(false);\r
187         req.session.items = info;\r
188 \r
189         res.render("profile\\registor",{token:info.token});\r
190 }\r
191 \r
192 //\r
193 // ProfileCollectionクラス\r
194 //\r
195 function ProfileCollection()\r
196 {\r
197         var pool = new MySQLPool();\r
198         this.AuthAsync = function(name,password,cb){\r
199                 async.waterfall([\r
200                         function(callback){\r
201                                 pool.acquire(callback);\r
202                         },\r
203                         function(client,callback){\r
204                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
205                                         callback(err,result,client);\r
206                                 });\r
207                         },\r
208                         function(result,client,callback){\r
209                                 pool.release(client);\r
210                                 if(result[0].password == password)\r
211                                         callback(null,true);\r
212                                 else\r
213                                         callback(null,false);\r
214                         }\r
215                 ],cb);\r
216         }\r
217         this.GetAsync = function(name,cb){\r
218                 async.waterfall([\r
219                         function(callback){\r
220                                 pool.acquire(callback);\r
221                         },\r
222                         function(client,callback){\r
223                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
224                                         callback(err,result,client);\r
225                                 });\r
226                         },\r
227                         function(result,client,callback){\r
228                                 pool.release(client);\r
229                                 callback(null,result);\r
230                         }\r
231                 ],cb);\r
232         }\r
233         this.AddAsync = function(data,cb){\r
234                 var item = {\r
235                         name:data.name,\r
236                         age:data.age,\r
237                         height:data.height,\r
238                         weight:data.weight,\r
239                         race:data.race,\r
240                         look:data.look,\r
241                         password:data.password,\r
242                         lastmodified:new Date(),\r
243                         etc:data.etc\r
244                 };\r
245                 async.waterfall([\r
246                         function(callback){\r
247                                 pool.acquire(callback);\r
248                         },\r
249                         function(client,callback){\r
250                                 client.query("INSERT INTO list SET ?",[item],function(err,result){\r
251                                         callback(err,result,client);\r
252                                 });\r
253                         },\r
254                         function(result,client,callback){\r
255                                 pool.release(client);\r
256                                 callback(null,result);\r
257                         }\r
258                 ],cb);\r
259         }\r
260         this.UpdatAsync = function(name,data,cb){\r
261                 var item = {\r
262                         name:data.name,\r
263                         age:data.age,\r
264                         height:data.height,\r
265                         weight:data.weight,\r
266                         race:data.race,\r
267                         look:data.look,\r
268                         password:data.password,\r
269                         lastmodified:new Date(),\r
270                         etc:data.etc\r
271                 };\r
272                 async.waterfall([\r
273                         function(callback){\r
274                                 pool.acquire(callback);\r
275                         },\r
276                         function(client,callback){\r
277                                 client.query("UPDATE list SET ? WHERE name = ?",[item,name],function(err,result){\r
278                                         callback(err,result,client);\r
279                                 });\r
280                         },\r
281                         function(result,client,callback){\r
282                                 pool.release(client);\r
283                                 callback(null,result);\r
284                         }\r
285                 ],cb);\r
286         }\r
287         this.RemoveAsync = function(name,cb){\r
288                 async.waterfall([\r
289                         function(callback){\r
290                                 pool.acquire(callback);\r
291                         },\r
292                         function(client,callback){\r
293                                 client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
294                                         callback(err,result,client);\r
295                                 });\r
296                         },\r
297                         function(result,client,callback){\r
298                                 pool.release(client);\r
299                                 callback(null,result);\r
300                         }\r
301                 ],cb);\r
302         }\r
303         this.FindByNameAsync = function(pattern,start,count,cb){\r
304                 async.waterfall([\r
305                         function(callback){\r
306                                 pool.acquire(callback);\r
307                         },\r
308                         function(client,callback){\r
309                                 client.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],function(err,result){\r
310                                         callback(err,result,client);\r
311                                 });\r
312                         },\r
313                         function(result,client,callback){\r
314                                 pool.release(client);\r
315                                 callback(null,result);\r
316                         }\r
317                 ],cb);\r
318         }\r
319         this.ToArrayAsync = function(start,count,cb){\r
320                 async.waterfall([\r
321                         function(callback){\r
322                                 pool.acquire(callback);\r
323                         },\r
324                         function(client,callback){\r
325                                 client.query("SELECT * FROM list LIMIT ?,?",[start,count],function(err,result){\r
326                                         callback(err,result,client);\r
327                                 });\r
328                         },\r
329                         function(result,client,callback){\r
330                                 pool.release(client);\r
331                                 callback(null,result);\r
332                         }\r
333                 ],cb);\r
334         }\r
335 }\r
336 \r
337 function MySQLPool()\r
338 {\r
339         var generic_pool = require("generic-pool");\r
340         var mysql      = require("mysql");\r
341         return generic_pool.Pool({\r
342                 name : "mysql",\r
343                 max : 10,\r
344                 create : function(cb){\r
345                         var connection = mysql.createConnection({\r
346                                 host     : "localhost",\r
347                                 user     : $db_user,\r
348                                 password : $db_password,\r
349                                 database : "profile",\r
350                         });\r
351                         connection.connect();\r
352                         cb(null,connection);\r
353                 },\r
354                 destroy : function(db){\r
355                         db.end();\r
356                 }\r
357         });\r
358 }\r