UNPKG

open-music-api-node

Version:
121 lines (99 loc) 3.7 kB
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;