-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
152 lines (141 loc) · 4.09 KB
/
app.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// ---import package
const express = require('express')
const bodyParser = require('body-parser')
const sqlite3 = require('sqlite3').verbose()
//const cors = require('cors')
require('dotenv').config()
// ---establish database connection
const db = new sqlite3.Database(':memory:', (err) => {
if (err) {
console.error(err)
} else {
console.log('Database connection established')
}
})
// ---create table in database
db.run('CREATE TABLE IF NOT EXISTS addItem (name, type, lotNo, addDate, expiredDate)', (err) => {
if (err) {
console.error(err)
} else {
console.log('Table addItem is ready')
}
})
db.run('CREATE TABLE IF NOT EXISTS withdrawItem (name, withdrawDate)', (err) => {
if (err) {
console.error(err)
} else {
console.log('Table withdrawItem is ready')
}
})
// ---instantiate package
const app = express()
const port = process.env.PORT
// ---middleware funtion
app.use(bodyParser.urlencoded({extended: false}))
//app.use(cors())
// ---routing
app.get('/', (req, res) => {
res.json({ping: 'pong'})
})
// ---add item to database
app.post('/add', (req, res) => {
try {
let item = [
req.body.itemName,
req.body.type,
req.body.lotNo,
Date.now(),
Date.parse(req.body.expiredDate)
]
db.run('INSERT INTO addItem (name, type, lotNo, addDate, expiredDate) VALUES(?,?,?,?,?)', item, (err) => {
if (err) {
console.error(err)
} else {
res.json({success: 'add item successfully'})
}
})
} catch (err) {
console.error(err)
res.status(500).json({error : 'something wrong on POST at /add path'})
}
})
app.post('/withdraw', (req, res) => {
try {
let withdraw = [
req.body.itemName,
Date.now()
]
db.run('INSERT INTO withdrawItem (name, withdrawDate) VALUES(?,?)', withdraw, (err) => {
if (err) {
console.error(err)
} else {
res.json({success: 'withdraw item successfully'})
}
})
} catch (err) {
console.error(err)
res.status(500).json({error : 'something wrong on POST at /withdraw path'})
}
})
// ---retrieve data from database
app.get('/stock/:itemName?', (req, res) => {
try {
// ---if itemName specified
if (req.params.itemName) {
db.get('SELECT name, COUNT(*) AS count FROM withdrawItem WHERE name = ?',[req.params.itemName], (err, wrow) => {
if (err) {
console.error(err)
} else {
db.get('SELECT name, COUNT(*) AS count FROM addItem WHERE name = ?',[req.params.itemName], (err, arow) => {
if (err) {
console.error(err)
} else {
let diff = arow.count - wrow.count
db.all('SELECT name, expiredDate FROM addItem WHERE name = ? ORDER BY expiredDate DESC LIMIT ?',
[req.params.itemName, diff], (err, rows) => {
if (err) {
console.error(err)
} else {
res.json(rows)
}
})
}
})
}
})
} else {
db.all('SELECT name, COUNT(*) as count FROM addItem GROUP BY name', [], (err, arows) => {
if (err) {
console.error(err)
} else {
db.all('SELECT name, COUNT(*) as count FROM withdrawItem GROUP BY name', [], (err, wrows) => {
if (err) {
console.error(err)
} else {
result = []
for (let i = 0; i < arows.length; i++) {
for (let j = 0; j < wrows.length; j++) {
if (arows[i].name === wrows[j].name) {
let diff = arows[i].count - wrows[j].count
itemObj = {
name: arows[i].name,
count: diff
}
result.push(itemObj)
}
}
}
res.send(result)
}
})
}
})
}
} catch (err) {
console.error(err)
res.status(500).json({error: 'something wrong on GET at /stock path'})
}
})
app.listen(port, () => {
console.log(`App listening on port ${port}`)
})