You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.0 KiB
107 lines
3.0 KiB
const express = require('express'); |
|
const bodyParser = require('body-parser'); |
|
const models = require('./models'); |
|
import * as api from '../client/src/api'; |
|
|
|
const app = express(); |
|
|
|
// TODO: configurable port |
|
const port = process.env.PORT || 5000; |
|
|
|
app.use(bodyParser.json()); |
|
app.use(bodyParser.urlencoded({ extended: true })); |
|
|
|
app.post(api.CreateSongEndpoint, (req: any, res: any) => { |
|
if (!api.checkCreateSongRequest(req)) { |
|
console.log('Invalid CreateSong request: ' + JSON.stringify(req.body)); |
|
res.sendStatus(400); |
|
return; |
|
} |
|
const reqObject: api.CreateSongRequest = req.body; |
|
console.log("Request create song: ", reqObject); // TODO: remove |
|
// First check that the artist exists. |
|
models.Artist.findAll({ |
|
where: { id: reqObject.artistId } |
|
}) |
|
.then((artist: any[]) => { |
|
if (artist.length != 1) { |
|
console.log('Invalid CreateSong request: ' + JSON.stringify(req.body) |
|
+ ". There is no artist with id " + reqObject.artistId + "."); |
|
res.sendStatus(400); |
|
return; |
|
} |
|
models.Song.create({ |
|
title: reqObject.title, |
|
ArtistId: reqObject.artistId |
|
}) |
|
.then((song:any) => { |
|
const responseObject: api.CreateSongResponse = { |
|
id: song.id |
|
}; |
|
res.status(200).send(responseObject); |
|
}) |
|
}) |
|
}); |
|
|
|
app.get(api.ListSongsEndpoint, (req: any, res: any) => { |
|
if (!api.checkListSongsRequest(req)) { |
|
console.log('Invalid ListSongs request: ' + JSON.stringify(req.body)); |
|
res.sendStatus(400); |
|
return; |
|
} |
|
models.Song.findAll({ |
|
include: [models.Artist] |
|
}) |
|
.then((songs: any[]) => { |
|
console.log(songs); |
|
const response: api.ListSongsResponse = songs.map((song: any) => { |
|
return { |
|
title: song.title, |
|
id: song.id, |
|
artistName: song.Artist.name, |
|
artistId: song.ArtistId, |
|
}; |
|
}); |
|
res.send(response); |
|
}); |
|
}); |
|
|
|
app.post(api.CreateArtistEndpoint, (req: any, res: any) => { |
|
if (!api.checkCreateArtistRequest(req)) { |
|
console.log('Invalid CreateArtist request: ' + JSON.stringify(req.body)); |
|
res.sendStatus(400); |
|
return; |
|
} |
|
const reqObject: api.CreateArtistRequest = req.body; |
|
models.Artist.create(reqObject) |
|
.then((artist: any) => { |
|
const responseObject: api.CreateArtistResponse = { |
|
id: artist.id |
|
}; |
|
res.status(200).send(responseObject); |
|
}) |
|
}); |
|
|
|
app.get(api.ListArtistsEndpoint, (req: any, res: any) => { |
|
if (!api.checkListArtistsRequest(req)) { |
|
console.log('Invalid ListArtists request: ' + JSON.stringify(req.body)); |
|
res.sendStatus(400); |
|
return; |
|
} |
|
models.Artist.findAll() |
|
.then((artists: any[]) => { |
|
const response: api.ListArtistsResponse = artists.map((artist: any) => { |
|
return { |
|
name: artist.name, |
|
id: artist.id, |
|
}; |
|
}); |
|
res.send(response); |
|
}); |
|
}); |
|
|
|
models.sequelize.sync().then(() => { |
|
app.listen(port, () => console.log(`Listening on port ${port}`)); |
|
}) |
|
|
|
export { } |