public LyricsController(
     ICreateLyricInputHandler <IActionResult> createLyricInputHandler,
     ICreateLyricOutputHandler <IActionResult> createLyricOutputHandler,
     IEditLyricInputHandler <IActionResult> editLyricInputHandler,
     IEditLyricOutputHandler <IActionResult> editLyricOutputHandler,
     IDeleteLyricInputHandler <IActionResult> deleteLyricInputHandler,
     IDeleteLyricOutputHandler <IActionResult> deleteLyricOutputHandler,
     IDetailsLyricsInputHandler <IActionResult> detailsLyricInputHandler,
     IDetailsLyricsOutputHandler <IActionResult> detailsLyricOutputHandler,
     IAllLyricsInputHandler <IActionResult> allLyricsInputHandler,
     IAllLyricsOutputHandler <IActionResult> allLyricsOutputHandler,
     IMyLyricsInputHandler <IActionResult> myLyricsInputHandler,
     IMyLyricsOutputHandler <IActionResult> myLyricsOutputHandler,
     ICanManageLyricInputHandler <IActionResult> canManageLyricInputHandler,
     ICanManageLyricOutputHandler <IActionResult> canManageLyricOutputHandler)
 {
     _createLyricInputHandler     = createLyricInputHandler;
     _createLyricOutputHandler    = createLyricOutputHandler;
     _editLyricInputHandler       = editLyricInputHandler;
     _editLyricOutputHandler      = editLyricOutputHandler;
     _deleteLyricInputHandler     = deleteLyricInputHandler;
     _deleteLyricOutputHandler    = deleteLyricOutputHandler;
     _detailsLyricInputHandler    = detailsLyricInputHandler;
     _detailsLyricOutputHandler   = detailsLyricOutputHandler;
     _allLyricsInputHandler       = allLyricsInputHandler;
     _allLyricsOutputHandler      = allLyricsOutputHandler;
     _myLyricsInputHandler        = myLyricsInputHandler;
     _myLyricsOutputHandler       = myLyricsOutputHandler;
     _canManageLyricInputHandler  = canManageLyricInputHandler;
     _canManageLyricOutputHandler = canManageLyricOutputHandler;
 }
        public async Task HandleAsync(EditLyricInput input, IEditLyricOutputHandler <T> output)
        {
            var author = await _userRepository.GetByUsernameAsync(input.AuthorUsername);

            if (author == null)
            {
                output.BadRequest("The given author does not exist");
                return;
            }

            var dbLyric = await _lyricRepository.GetAsync(input.Id);

            if (dbLyric == null)
            {
                output.BadRequest("The given lyric does not exist");
                return;
            }
            if (dbLyric.AuthorId != author.Id)
            {
                output.BadRequest("The given lyric does not belong to you");
                return;
            }
            try
            {
                dbLyric.Title  = input.Title;
                dbLyric.Text   = input.Text;
                dbLyric.Singer = input.Singer;

                await _lyricRepository.UpdateAsync(dbLyric);

                output.Success(new EditLyricOutput(dbLyric.Id, dbLyric.Text, dbLyric.Title, dbLyric.Singer));
            }
            catch (Exception)
            {
                output.BadRequest("Editing lyric failed.");
            }
        }