-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.coffee
129 lines (111 loc) · 4.05 KB
/
server.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
config = require "config"
console.log "load config", JSON.stringify config, "\n"
http = require "http"
express = require "express"
bodyParser = require "body-parser"
logger = require "morgan"
#socketio = require "socket.io"
mongoose = require "mongoose"
mongoose.connect "mongodb://#{config.mongodb.host}/#{config.mongodb.db}"
{User} = require "./models/user"
{Beacon} = require "./models/beacon"
app = express()
app.use express.static __dirname+"/public"
app.use bodyParser()
#app.use logger("dev")
app.set "views", __dirname+"/views"
app.set "view engine", "jade"
app.get "/", (req, res) ->
res.render "index", {pretty:true}
app.get "/app", (req, res) ->
res.render "app", {pretty:true}
app.get "/admin", (req, res) ->
Beacon.find({}).sort({uuid:1}).exec (err, beacons) ->
res.render "admin", {beacons:beacons, pretty:true}
### Beacon ###
# GET /beacon
# ビーコンの一覧を取得する
app.get "/beacon", (req, res) ->
Beacon.find {}, (err, beacons) =>
res.send beacons
# POST /beacon
# ビーコンを新規作成または更新する
app.post "/beacon", (req, res) ->
console.log "/beacon", req.body
b = new Beacon
uuid: req.body.uuid
b.save ->
res.send {result:"succeed"}
# GET /beacon/:uuid
# 特定のビーコンの情報と、その近くにいるユーザーの一覧を取得する
app.get "/beacon/:uuid", (req, res) ->
console.log req.params.uuid
Beacon.findOne {uuid:req.params.uuid}, (err, beacon) ->
if beacon?
beacon.getUsers (users) ->
res.send
beacon:beacon
users: users
else
res.send {result:"failed", reason:"beacon not found"}, 401
app.get "/beacon/:uuid/html", (req, res) ->
Beacon.findOne {uuid:req.params.uuid}, (err, beacon) ->
if beacon?
beacon.getUsers (users) ->
res.render "beacon", {beacon:beacon}
else
res.send "beacon not found", 401
app.post "/beacon/:uuid/html", (req, res) ->
console.log req.body
Beacon.findOne {uuid:req.params.uuid}, (err, beacon) ->
if beacon?
beacon.name = req.body.name
beacon.room = req.body.room
beacon.lat = req.body.lat
beacon.lon = req.body.lon
beacon.save ->
res.redirect "/"
else
res.send "beacon not found", 401
### User ###
# GET /user
# userの一覧を取得する
app.get "/user", (req, res) ->
resp = {}
User.find({}).populate("beacon").exec (err, users)->
for user in users
if user.beacon?
if resp[user.beacon.uuid]?
resp[user.beacon.uuid]["users"].push user.toJSON()
else
if user.beacon.lon? and user.beacon.lat?
resp[user.beacon.uuid] = {}
resp[user.beacon.uuid].name = user.beacon.name
resp[user.beacon.uuid].room = user.beacon.room
resp[user.beacon.uuid].lon = user.beacon.lon
resp[user.beacon.uuid].lat = user.beacon.lat
resp[user.beacon.uuid]["users"] = new Array()
resp[user.beacon.uuid]["users"].push user.toJSON()
res.send resp
# POST /user
# userのプロパティを更新する
# 存在しなければ作成する
# beaconもuuidにあうものが存在しなければ作成する
app.post "/user", (req, res) ->
data = req.body
if not data.uuid?
console.log "uuid not found", data
res.send {result:"failed", reason:"uuid is required"}, 401
User.findOne {uuid:data.uuid}, (err, user) ->
if user?
user.update data, ->
res.send {result:"succeed"}
else
user = new User({uuid:data.uuid})
user.save ->
user.update data, ->
res.send {result:"succeed"}
module.exports = app
if not module.parent
server = http.createServer(app).listen(config.http.port)
console.log "app start #{config.http.port}"