Ejemplo n.º 1
0
        public IHttpResponse GetCreatePage()
        {
            GetCreateAlbumPageViewModel viewModel = new GetCreateAlbumPageViewModel()
            {
                ErrorMessage = string.Empty
            };

            return(this.View("AlbumsCreate", HttpResponseStatusCode.Ok, viewModel));
        }
Ejemplo n.º 2
0
        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));
        }