-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
124 lines (100 loc) · 3.36 KB
/
server.js
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
const express = require("express")
const app = express()
const R = require('ramda')
const logger = require('morgan')
const log = console.log
const dotenv = require("dotenv")
const morganFormat = process.env.ENV == "prod" ? 'tiny' : 'dev'
app.use(logger(morganFormat))
app.use(express.json())
app.use(express.static('static'))
dotenv.config()
const PORT = process.env.ENV == "prod" ? 80 : 3000
const HOST = process.env.ENV == "prod" ? '0.0.0.0' : '127.0.0.1'
/*------------------------
👇 JEXIA configuration
-------------------------*/
const jexiaSDK = require("jexia-sdk-js/node")
const dataModule = jexiaSDK.dataOperations()
const field = jexiaSDK.field
const credentials = {
projectID: process.env.PROJECT_ID,
key: process.env.API_KEY,
secret: process.env.API_SECRET,
}
jexiaSDK.jexiaClient().init(credentials, dataModule)
// Users' dataset
const users = dataModule.dataset("users")
/*------------------------
👇 HANDLERS
-------------------------*/
// Simple error handler
const handleError = (err, res) => {
log(err); res.status(err.httpStatus.code).json({msg: `Error: ${err.httpStatus.status}`})
}
// Simple ok handler
const handleOk = (records, action, status, res) => {
log(`${action} USER ok`); records === null
? res.sendStatus(status)
: res.status(status).json(records)
}
/*------------------------
👇 API
-------------------------*/
// Seed the dataset
app.get('/api/seed', (req, res) => {
let usersSeed = [
{ name: "Joseph K", verified: false },
{ name: "Blacksad", verified: false }
]
let insertIfNone = selectedRecords => {
(R.isEmpty(selectedRecords))
? users.insert(usersSeed).subscribe( r=>res.status(201).json(r), e=>handleError(e, res) )
: res.sendStatus(204)
}
// Delete all users from the dataset
users.delete().where(field("name").isNotNull()).subscribe( r=>log("USER DELETE ok"), e=> handleError(e, res) )
// If no users in the dataset, create new users
users.select().subscribe(insertIfNone, e=>handleError(e, res))
})
// Return all users
app.get('/api/users', (req, res) => {
users
.select()
.fields(["id", "name", "verified"])
.subscribe( r => handleOk(r, 'GET ALL', 200, res), e => handleError(e, res) )
})
// Create a new user
app.post('/api/users/create', (req, res) => {
users
.insert(req.body)
.subscribe( r => handleOk(r[0], 'CREATE', 201, res), e => handleError(e, res) )
})
// Update a user
app.put('/api/users/:id/update', (req, res) => {
users
.update([{id: req.params.id, ...req.body}])
.subscribe( r => handleOk(r[0], 'UPDATE', 200, res), e => handleError(e, res) )
})
// Delete a user by id
app.delete('/api/users/:id/delete', (req, res) => {
users
.delete()
.where(field => field("id").isEqualTo(req.params.id))
.subscribe( r => handleOk(r[0].id, 'DELETE', 200, res), e => handleError(e, res) )
})
// Verify a user by id
app.get('/api/users/:id/verify', (req, res) => {
users
.update([{id: req.params.id, verified: true}])
.subscribe( r => handleOk(r[0].id, 'VERIFY', 200, res), e => handleError(e, res) )
})
/*------------------------
👇 HTML file
-------------------------*/
app.get('*', (req, res) => res.sendFile('index.html', {root: `${__dirname}/static`}))
/*------------------------
👇 SERVER
-------------------------*/
app.listen(PORT,HOST)
log(`App running on http://${HOST}:${PORT}`)