-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
153 lines (138 loc) · 3.79 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
153
const express = require('express')
const {open} = require('sqlite')
const sqlite3 = require('sqlite3')
const path = require('path')
const databasePath = path.join(__dirname, 'cricketMatchDetails.db')
const app = express()
app.use(express.json())
let database = null
const initializeDbAndServer = async () => {
try {
database = await open({
filename: databasePath,
driver: sqlite3.Database,
})
app.listen(3000, () =>
console.log('Server Running at http://localhost:3000/'),
)
} catch (error) {
console.log(`DB Error: ${error.message}`)
process.exit(1)
}
}
initializeDbAndServer()
const convertPlayerDbObjectToResponseObject = dbObject => {
return {
playerId: dbObject.player_id,
playerName: dbObject.player_name,
}
}
const convertMatchDetailsDbObjectToResponseObject = dbObject => {
return {
matchId: dbObject.match_id,
match: dbObject.match,
year: dbObject.year,
}
}
app.get('/players/', async (request, response) => {
const getPlayerQuery = `
SELECT
*
FROM
player_details;`
const playersArray = await database.all(getPlayerQuery)
response.send(
playersArray.map(eachPlayer =>
convertPlayerDbObjectToResponseObject(eachPlayer),
),
)
})
app.get('/players/:playerId/', async (request, response) => {
const {playerId} = request.params
const getPlayerQuery = `
SELECT
*
FROM
player_details
WHERE
player_id = ${playerId};`
const player = await database.get(getPlayerQuery)
response.send(convertPlayerDbObjectToResponseObject(player))
})
app.put('/players/:playerId/', async (request, response) => {
const {playerId} = request.params
const {playerName} = request.body
const updatePlayerQuery = `
UPDATE
player_details
SET
player_name = '${playerName}'
WHERE
player_id = ${playerId};`
await database.run(updatePlayerQuery)
response.send('Player Details Updated')
})
app.get('/matches/:matchId/', async (request, response) => {
const {matchId} = request.params
const matchDetailsQuery = `
SELECT
*
FROM
match_details
WHERE
match_id = ${matchId};`
const matchDetails = await database.get(matchDetailsQuery)
response.send(convertMatchDetailsDbObjectToResponseObject(matchDetails))
})
app.get('/players/:playerId/matches/', async (request, response) => {
const {playerId} = request.params
const getPlayerMatchesQuery = `
SELECT
*
FROM
player_match_score
NATURAL JOIN match_details
WHERE
player_id = ${playerId};`
const playerMatches = await database.all(getPlayerMatchesQuery)
response.send(
playerMatches.map(eachMatch =>
convertMatchDetailsDbObjectToResponseObject(eachMatch),
),
)
})
app.get('/matches/:matchId/players', async (request, response) => {
const {matchId} = request.params
const getMatchPlayersQuery = `
SELECT
*
FROM
player_match_score
NATURAL JOIN player_details
WHERE
match_id = ${matchId};`
const playersArray = await database.all(getMatchPlayersQuery)
response.send(
playersArray.map(eachPlayer =>
convertPlayerDbObjectToResponseObject(eachPlayer),
),
)
})
app.get('/players/:playerId/playerScores/', async (request, response) => {
const {playerId} = request.params
const getMatchPlayersQuery = `
SELECT
player_id AS playerId,
player_name AS playerName,
SUM(score) AS totalScore,
SUM(fours) AS totalFours,
SUM(sixes) AS totalSixes
FROM
player_match_score
NATURAL JOIN player_details
WHERE
player_id = ${playerId};`
const playersMatchDetails = await database.get(getMatchPlayersQuery)
response.send(playersMatchDetails)
})
module.exports = app