public async Task <IActionResult> Add(CreateAlbumViewModel model) { AlbumViewModelMapper mapper = new AlbumViewModelMapper(); PublishStatus flags = PublishStatus.PUBLISHED | PublishStatus.UNPUBLISHED; var artistNames = await _artistRepo.ListNamesAsync(flags); model.ArtistOptions = artistNames .Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString(), Selected = x.Id == model.ArtistId }).ToList(); List <CheckBoxListItem> groupOptions = (await _albumGroupRepo.ListAsync()) .Select(x => new CheckBoxListItem { Label = x.Name, Value = x.Key, IsSelected = model.Groups.Any(grp => grp.IsSelected && grp.Value == x.Key) }).ToList(); model.Groups = groupOptions; if (ModelState.IsValid) { int?createdImageId = null; if (model.CoverImage != null && model.CoverImage.Length > 0) { using (MemoryStream ms = new MemoryStream()) { await model.CoverImage.CopyToAsync(ms); ImageReferenceDetail imageRef = await _imageRepo.AddAsync(new ImageReferenceDetail { Data = ms.ToArray(), FileName = model.CoverImage.FileName, MimeType = model.CoverImage.ContentType }); if (imageRef != null) { createdImageId = imageRef.Id; } } } var result = await _albumRepo.AddAsync(mapper.Map(model, createdImageId)); await _albumGroupRepo.SetGroupsForAlbum(result.Id, model.Groups.Where(g => g.IsSelected).Select(g => g.Value).ToList()); this.SetBootstrapPageAlert("Success", "Album added", BootstrapAlertType.success); return(RedirectToAction(nameof(Index))); } else { return(View(model)); } }
public async Task <IActionResult> Index([FromQuery] int page = 0, PublishStatus?status = null) { AlbumIndexViewModel model = new AlbumIndexViewModel(); page = Math.Max(page, 0); PublishStatus flags = PublishStatus.PUBLISHED | PublishStatus.UNPUBLISHED; if (status.HasValue) { flags = status.Value; } var result = await _albumRepo.ListAsync(page, _pageSize, flags); model.PageIndex = result.PageIndex; model.PageSize = result.PageSize; model.TotalPages = (int)Math.Ceiling(((double)result.TotalItems / (double)result.PageSize)); AlbumViewModelMapper mapper = new AlbumViewModelMapper(); model.Items.AddRange(result.Items.Select(i => mapper.Map(i))); return(View(model)); }
public async Task <IActionResult> Edit(int id) { AlbumViewModelMapper mapper = new AlbumViewModelMapper(); EditAlbumViewModel model = new EditAlbumViewModel(); var genresResult = await _genreRepo.ListAsync(contentPublicationFlags : PublishStatus.PUBLISHED); var allGroups = await _albumGroupRepo.ListAsync(); var albumGroupKeys = (await _albumGroupRepo.GetGroupsForAlbum(id)).Select(x => x.Key); AlbumDetail album = await _albumRepo.GetAsync(id); if (album != null) { PublishStatus flags = PublishStatus.PUBLISHED | PublishStatus.UNPUBLISHED; ICollection <ArtistNameRef> artistNames = await _artistRepo.ListNamesAsync(flags); model = mapper.Map(album, artistNames, genresResult.Genres); model.Groups = allGroups.Select(x => new CheckBoxListItem { Label = x.Name, Value = x.Key, IsSelected = (albumGroupKeys.Contains(x.Key)) }).ToList(); return(View(model)); } else { // todo: show error message return(RedirectToAction(nameof(Index))); } }