open-music-api-node
Version:
121 lines (99 loc) • 3.7 kB
JavaScript
class PlaylistHandler {
constructor(service, validator) {
this._service = service;
this._validator = validator;
this.addPlaylistHandler = this.addPlaylistHandler.bind(this);
this.getPlaylistHandler = this.getPlaylistHandler.bind(this);
this.getPlaylistByIdHandler = this.getPlaylistByIdHandler.bind(this);
this.deletePlaylistByIdHandler = this.deletePlaylistByIdHandler.bind(this);
this.addSongToPlaylistHandler = this.addSongToPlaylistHandler.bind(this);
this.getSongFromPlaylistHandler = this.getSongFromPlaylistHandler.bind(this);
this.deleteSongFromPlaylistHandler = this.deleteSongFromPlaylistHandler.bind(this);
}
async addPlaylistHandler(request, h) {
this._validator.validatePlaylistPayload(request.payload);
const { name } = request.payload;
const { id: credentialId } = request.auth.credentials;
const playlist = await this._service.addPlaylist({ name, owner: credentialId });
const response = h.response({
status: 'success',
message: 'Playlist baru berhasil ditambahkan',
data: {
playlistId: playlist,
},
});
response.code(201);
return response;
}
async getPlaylistHandler(request) {
const { id: credentialId } = request.auth.credentials;
const playlist = await this._service.getPlaylist(credentialId);
return {
status: 'success',
data: {
playlists: playlist,
},
};
}
async getPlaylistByIdHandler(request) {
const { id } = request.params;
const { id: credentialId } = request.auth.credentials;
await this._service.verifyPlaylistAccess(id, credentialId);
const playlist = await this._service.getPlaylistById(id);
return {
status: 'success',
data: {
playlist,
},
};
}
async deletePlaylistByIdHandler(request) {
const { id } = request.params;
const { id: credentialId } = request.auth.credentials;
await this._service.verifyPlaylistAccess(id, credentialId);
await this._service.deletePlaylistById(id);
return {
status: 'success',
message: 'Playlist berhasil dihapus',
};
}
async addSongToPlaylistHandler(request, h) {
this._validator.validatePlaylistSongPayload(request.payload);
const { songId } = request.payload;
const { id: playlistId } = request.params;
const { id: credentialId } = request.auth.credentials;
await this._service.verifyPlaylistAccess(playlistId, credentialId);
await this._service.addSongToPlaylist({ songId, playlistId, userId: credentialId });
const response = h.response({
status: 'success',
message: 'Lagu berhasil ditambahkan ke playlist',
});
response.code(201);
return response;
}
async getSongFromPlaylistHandler(request) {
const { id: playlistId } = request.params;
const { id: credentialId } = request.auth.credentials;
await this._service.verifyPlaylistAccess(playlistId, credentialId);
const playlist = await this._service.getSongFromPlaylist({ playlistId });
return {
status: 'success',
data: {
playlist,
},
};
}
async deleteSongFromPlaylistHandler(request) {
this._validator.validatePlaylistSongPayload(request.payload);
const { songId } = request.payload;
const { id: playlistId } = request.params;
const { id: credentialId } = request.auth.credentials;
await this._service.verifyPlaylistAccess(playlistId, credentialId);
await this._service.deleteSongFromPlaylist({ songId, playlistId, userId: credentialId });
return {
status: 'success',
message: 'Lagu berhasil dihapus dari playlist',
};
}
}
module.exports = PlaylistHandler;