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                         password:data.password,\r
241                         lastmodified:new Date(),\r
242                         etc:data.etc\r
243                 };\r
244                 async.waterfall([\r
245                         function(callback){\r
246                                 pool.acquire(callback);\r
247                         },\r
248                         function(client,callback){\r
249                                 client.query("INSERT INTO list SET ?",[item],function(err,result){\r
250                                         callback(err,result,client);\r
251                                 });\r
252                         },\r
253                         function(result,client,callback){\r
254                                 pool.release(client);\r
255                                 callback(null,result);\r
256                         }\r
257                 ],cb);\r
258         }\r
259         this.UpdatAsync = function(name,data,cb){\r
260                 var item = {\r
261                         name:data.name,\r
262                         age:data.age,\r
263                         height:data.height,\r
264                         weight:data.weight,\r
265                         race:data.race,\r
266                         password:data.password,\r
267                         lastmodified:new Date(),\r
268                         etc:data.etc\r
269                 };\r
270                 async.waterfall([\r
271                         function(callback){\r
272                                 pool.acquire(callback);\r
273                         },\r
274                         function(client,callback){\r
275                                 client.query("UPDATE list SET ? WHERE name = ?",[item,name],function(err,result){\r
276                                         callback(err,result,client);\r
277                                 });\r
278                         },\r
279                         function(result,client,callback){\r
280                                 pool.release(client);\r
281                                 callback(null,result);\r
282                         }\r
283                 ],cb);\r
284         }\r
285         this.RemoveAsync = function(name,cb){\r
286                 async.waterfall([\r
287                         function(callback){\r
288                                 pool.acquire(callback);\r
289                         },\r
290                         function(client,callback){\r
291                                 client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
292                                         callback(err,result,client);\r
293                                 });\r
294                         },\r
295                         function(result,client,callback){\r
296                                 pool.release(client);\r
297                                 callback(null,result);\r
298                         }\r
299                 ],cb);\r
300         }\r
301         this.FindByNameAsync = function(pattern,start,count,cb){\r
302                 async.waterfall([\r
303                         function(callback){\r
304                                 pool.acquire(callback);\r
305                         },\r
306                         function(client,callback){\r
307                                 client.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],function(err,result){\r
308                                         callback(err,result,client);\r
309                                 });\r
310                         },\r
311                         function(result,client,callback){\r
312                                 pool.release(client);\r
313                                 callback(null,result);\r
314                         }\r
315                 ],cb);\r
316         }\r
317         this.ToArrayAsync = function(start,count,cb){\r
318                 async.waterfall([\r
319                         function(callback){\r
320                                 pool.acquire(callback);\r
321                         },\r
322                         function(client,callback){\r
323                                 client.query("SELECT * FROM list LIMIT ?,?",[start,count],function(err,result){\r
324                                         callback(err,result,client);\r
325                                 });\r
326                         },\r
327                         function(result,client,callback){\r
328                                 pool.release(client);\r
329                                 callback(null,result);\r
330                         }\r
331                 ],cb);\r
332         }\r
333 }\r
334 \r
335 function MySQLPool()\r
336 {\r
337         var generic_pool = require("generic-pool");\r
338         var mysql      = require("mysql");\r
339         return generic_pool.Pool({\r
340                 name : "mysql",\r
341                 max : 10,\r
342                 create : function(cb){\r
343                         var connection = mysql.createConnection({\r
344                                 host     : "localhost",\r
345                                 user     : $db_user,\r
346                                 password : $db_password,\r
347                                 database : "profile",\r
348                         });\r
349                         connection.connect();\r
350                         cb(null,connection);\r
351                 },\r
352                 destroy : function(db){\r
353                         db.end();\r
354                 }\r
355         });\r
356 }\r