public IHttpResponse GetCreatePage() { GetCreateAlbumPageViewModel viewModel = new GetCreateAlbumPageViewModel() { ErrorMessage = string.Empty }; return(this.View("AlbumsCreate", HttpResponseStatusCode.Ok, viewModel)); }
public IHttpResponse PostCreateAlbum(DoAlbumInputViewModel model) { Regex albumNameRegex = new Regex(@"^\w{3,30}$"); Regex coverUrlRegex = new Regex(@"^\b((http|https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$"); string cookieValue = this.Request.Cookies.GetCookie(AuthenticationCookieKey).Value; string username = this.UserCookieService.DecryptString(cookieValue, EncryptKey); string userId = this.Context .Users .First(user => user.Username == username) .Id; string albumId = Guid.NewGuid().ToString(); model.Cover = StringExtensions.UrlDecode(model.Cover); Album album = new Album() { Id = albumId, Name = model.Name, Cover = model.Cover }; UserAlbum userAlbum = new UserAlbum() { Id = Guid.NewGuid().ToString(), UserId = userId, AlbumId = albumId }; if (!albumNameRegex.Match(model.Name).Success || !coverUrlRegex.Match(model.Cover).Success) { GetCreateAlbumPageViewModel createPageViewModel = new GetCreateAlbumPageViewModel() { ErrorMessage = InvalidAlbumInformationError }; return(this.View("AlbumsCreate", HttpResponseStatusCode.BadRequest, createPageViewModel)); } else if (this.Context.UserAlbums.Where(ua => ua.UserId == userId).Any(a => a.Album.Name == model.Name)) { GetCreateAlbumPageViewModel createPageViewModel = new GetCreateAlbumPageViewModel() { ErrorMessage = AlbumAlreadyExistsError }; return(this.View("AlbumsCreate", HttpResponseStatusCode.BadRequest, createPageViewModel)); } using (this.Context) { this.Context .Add(album); this.Context .UserAlbums .Add(userAlbum); this.Context.SaveChanges(); } AlbumDetailsViewModel viewModel = new AlbumDetailsViewModel() { Name = model.Name, Price = $"{album.Price.ToString(CultureInfo.InvariantCulture):F2}", Tracks = new AlbumTrack[0], Cover = model.Cover, CreateTrack = $"'/Tracks/Create?albumId={album.Id}'" }; return(this.View("album", HttpResponseStatusCode.Ok, viewModel)); }