public async Task <ActionResult <string> > CreateGroupAlbumAsync(GroupAlbumUploadModel groupAlbumUploadModel) { try { if (await IsUserValidAsync()) { var newGroupAlbumIdentifier = await GroupAlbumModel.CreateNewGroupAlbumAsync( groupAlbumUploadModel, ExtractUserIdFromToken(), RepositoryManager, GetMapper(), _spotifyAPICredentials); return(Ok(newGroupAlbumIdentifier)); } else { return(Unauthorized()); } } catch (InvalidTokenException err) { return(BadRequest(new InvalidTokenException(err.InvalidTokenType, err.ErrorMessage))); } catch (UserNotGroupMemberException) { return(Forbid()); } catch (Exception err) { LogException(err); return(Problem()); } }
public static async Task <string> CreateNewGroupAlbumAsync( GroupAlbumUploadModel groupAlbumUploadModel, Guid userId, IRepositoryManager repositoryManager, IMapper mapper, SpotifyAPICredentials spotifyAPICredentials) { var groupIdentifier = groupAlbumUploadModel.GroupIdentifier.ToUpperInvariant(); try { var group = await repositoryManager.GroupRepository.GetByIdentifierAsync(groupIdentifier); if (group != null) { var isUserMemberOfGroup = await GroupMemberModel.CheckGroupMemberExistsAsync( groupAlbumUploadModel.GroupIdentifier, userId, repositoryManager); if (isUserMemberOfGroup) { var newGroupAlbumIdentifier = await GenerateNewGroupAlbumIdentifierAsync( group.Id, repositoryManager.GroupAlbumRepository).ConfigureAwait(false); var newGroupAlbum = new GroupAlbum { GroupId = group.Id, Identifier = newGroupAlbumIdentifier, IsRandom = groupAlbumUploadModel.IsRandom, CreatedOn = DateTime.Now, CreatedBy = userId, LastUpdatedOn = DateTime.Now, LastUpdatedBy = userId }; var existingAlbum = await repositoryManager.AlbumRepository.CheckExistsBySpotifyIdAsync( groupAlbumUploadModel.AlbumIdentifier); if (existingAlbum != null) { newGroupAlbum.AlbumId = existingAlbum.Id; } else { var newAlbum = await AlbumModel.IndexNewAlbumAsync( groupAlbumUploadModel.AlbumIdentifier, repositoryManager, mapper, spotifyAPICredentials); newGroupAlbum.AlbumId = newAlbum.Id; } await repositoryManager.GroupAlbumRepository.AddAsync(newGroupAlbum); return(newGroupAlbumIdentifier); } else { throw new UserNotGroupMemberException( "You are not able to perform this action", "You are not able to perform this action"); } } else { throw new InvalidTokenException(InvalidTokenType.TokenNotFound, "The requested Group was not found"); } } catch (Exception) { throw; } }