示例#1
0
        public IHttpResponse CreateConfirm(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                var name  = ((ISet <string>)httpRequest.FormData["name"]).FirstOrDefault();
                var cover = ((ISet <string>)httpRequest.FormData["cover"]).FirstOrDefault();

                var album = new Album
                {
                    Id    = Guid.NewGuid().ToString(),
                    Name  = name,
                    Cover = cover,
                    Price = 0m
                };

                if (!this.IsValid(album))
                {
                    return(this.Redirect("/Albums/Create"));
                }

                context.Albums.Add(album);
                context.SaveChanges();

                return(this.Redirect("/Albums/All"));
            }
        }
示例#2
0
        public IHttpResponse All(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                if (!context.Albums.Any())
                {
                    this.ViewData["Albums"] = "There are currently no albums.";
                }

                else
                {
                    this.ViewData["Albums"] =
                        string.Join("<br/>",
                                    context
                                    .Albums
                                    .Select(a => $"<a class=\"text-primary font-weight-bold\" href=/Albums/Details?albumId={a.Id}>{WebUtility.UrlDecode(a.Name)}</a>")
                                    .ToList());
                }

                return(this.View());
            }
        }
示例#3
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            var albumId = int.Parse(httpRequest.QueryData["albumId"].ToString());
            var trackId = int.Parse(httpRequest.QueryData["trackId"].ToString());

            using (var db = new RunesDbContext())
            {
                var trackFromDb = db
                                  .Tracks
                                  .SingleOrDefault(x => x.Id == trackId);

                if (trackFromDb == null)
                {
                    return(this.Redirect($"/Albums/Details?id={albumId}"));
                }

                this.ViewData["albumId"] = albumId;
                this.ViewData["track"]   = trackFromDb.ToHtmlDetails(albumId.ToString());
            }

            return(this.View());
        }
示例#4
0
        public IHttpResponse All(IHttpRequest httpRequest)
        {
            if (!IsLoggedIn(httpRequest))
            {
                return(Redirect("/"));
            }

            var sb = new StringBuilder();

            sb.AppendLine("<div>");

            using (var context = new RunesDbContext())
            {
                if (!context.Albums.Any())
                {
                    sb.AppendLine("<p>No albums yet</p>");
                }
                else
                {
                    foreach (var album in context.Albums.ToList())
                    {
                        sb.AppendLine($"<a class=\"text-primary font-weight-bold\" href=/Albums/Details?id={album.Id}>{WebUtility.UrlDecode(album.Name)}</a>");
                    }
                }
            }

            sb.AppendLine("</div>");

            ViewData.Add("Albums", sb.ToString().TrimEnd());

            return(View());
        }
示例#5
0
        public IHttpResponse CreateConfirm(IHttpRequest httpRequest)
        {
            if (!this.IsLogedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }
            string albumId = httpRequest.QueryData["albumId"].ToString();

            using (var context = new RunesDbContext())
            {
                Track track = new Track()
                {
                    Name  = httpRequest.FormData["name"].ToString(),
                    Link  = httpRequest.FormData["link"].ToString(),
                    Price = decimal.Parse(httpRequest.FormData["price"].ToString())
                };

                if (track == null)
                {
                    return(this.Redirect($"/Tracks/Create?trackId{albumId}"));
                }

                Album albumFromDb = context.Albums.FirstOrDefault(album => album.Id == albumId);
                albumFromDb.Tracks.Add(track);
                albumFromDb.Price = ((albumFromDb.Tracks.Select(trackToSumm => trackToSumm.Price).Sum()) * 87) / 100;
                //context.Update(albumFromDb);
                context.SaveChanges();
            }

            return(this.Redirect($"/Albums/Details?albumId={albumId}"));
        }
示例#6
0
        public IHttpResponse RegisterConfirm(IHttpRequest httpRequest)
        {
            using (var context = new RunesDbContext())
            {
                string username        = httpRequest.FormData["username"].ToString();
                string password        = httpRequest.FormData["password"].ToString();
                string passwordConfirm = httpRequest.FormData["password"].ToString();
                string email           = httpRequest.FormData["email"].ToString();

                if (password != passwordConfirm)
                {
                    return(this.Redirect("/Users/Register"));
                }

                User user = new User()
                {
                    Username = username,
                    Password = this.HashPassword(password),
                    Email    = email
                };

                context.Users.Add(user);
                context.SaveChanges();

                return(this.Redirect("/Users/Login"));
            }
        }
        public IHttpResponse CreatePost(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                string name  = ((IList <string>)httpRequest.FormData["name"]).FirstOrDefault();
                string cover = ((IList <string>)httpRequest.FormData["cover"]).FirstOrDefault();

                Album album = new Album()
                {
                    Name  = name,
                    Cover = cover,
                    Price = 0m
                };

                context.Albums.Add(album);
                context.SaveChanges();
            }

            return(this.Redirect("/Albums/All"));
        }
示例#8
0
        public IHttpResponse CreateConfirm(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }
            var albumId = httpRequest.QueryData["albumId"].ToString();

            using (var context = new RunesDbContext())
            {
                var albumFromDb = context.Albums.SingleOrDefault(album => album.Id == albumId);

                if (albumFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                var name  = ((ISet <string>)(httpRequest.FormData["name"])).FirstOrDefault();
                var link  = ((ISet <string>)(httpRequest.FormData["link"])).FirstOrDefault();
                var price = ((ISet <string>)(httpRequest.FormData["price"])).FirstOrDefault();

                Track trackForDb = new Track
                {
                    Name  = name,
                    Link  = link,
                    Price = decimal.Parse(price)
                };
                albumFromDb.Tracks.Add(trackForDb);
                albumFromDb.Price = (albumFromDb.Tracks.Select(track => track.Price).Sum() * 87) / 100;
                context.Update(albumFromDb);
                context.SaveChanges();
            }
            return(this.Redirect($"/Albums/Details?id={albumId}"));
        }
示例#9
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            string albumId = httpRequest.QueryData["id"].ToString();

            using (var context = new RunesDbContext())
            {
                Album albumFromDb = context.Albums
                                    .Include(album => album.Tracks)//to check cearfully this usage of Include
                                    .SingleOrDefault(album => album.Id == albumId);

                if (albumFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                this.ViewData["Album"] = albumFromDb.ToHtmlDetails();

                return(this.View());
            }
        }
示例#10
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLogedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            string albumToReturn = "";

            using (var context = new RunesDbContext())
            {
                Album albumFromDb = context.Albums.FirstOrDefault(album => album.Id == httpRequest.QueryData["albumId"].ToString());

                if (albumFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                albumToReturn = albumFromDb.ToHtmlDetails();
            }

            this.ViewData["AlbumDetails"] = albumToReturn;

            return(this.View());
        }
示例#11
0
        public IHttpResponse CreateConfirm(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var db = new RunesDbContext())
            {
                var name  = ((ISet <string>)httpRequest.FormData["name"]).FirstOrDefault();
                var cover = ((ISet <string>)httpRequest.FormData["cover"]).FirstOrDefault();

                var album = new Album()
                {
                    Name  = name,
                    Cover = cover,
                    Price = 0M,
                };

                db.Albums.Add(album);
                db.SaveChanges();
            }

            return(this.Redirect("/Albums/All"));
        }
示例#12
0
 public void Configure(IServerRoutingTable serverRoutingTable)
 {
     using (var context = new RunesDbContext())
     {
         context.Database.EnsureCreated();
     }
 }
示例#13
0
        public IHttpResponse RegisterConfirm(IHttpRequest httpRequest)
        {
            using (var context = new RunesDbContext())
            {
                var username        = ((ISet <string>)httpRequest.FormData["username"]).FirstOrDefault();
                var password        = ((ISet <string>)httpRequest.FormData["password"]).FirstOrDefault();
                var confirmPassword = ((ISet <string>)httpRequest.FormData["confirmPassword"]).FirstOrDefault();
                var email           = ((ISet <string>)httpRequest.FormData["email"]).FirstOrDefault();

                if (password != confirmPassword)
                {
                    return(this.Redirect("/Users/Register"));
                }

                var user = new User
                {
                    Id       = Guid.NewGuid().ToString(),
                    Username = username,
                    Password = this.HashPassword(password),
                    Email    = email
                };

                if (!this.IsValid(user))
                {
                    return(this.Redirect("/Users/Register"));
                }

                context.Users.Add(user);
                context.SaveChanges();
            }

            return(this.Redirect("/Users/Login"));
        }
示例#14
0
 public void Configure(IList <Route> serverRoutingTable)
 {
     using (var db = new RunesDbContext())
     {
         db.Database.EnsureCreated();
     }
 }
        public bool Create(string albumId, string name, string link, decimal price)
        {
            using (RunesDbContext db = new RunesDbContext())
            {
                Track track = new Track()
                {
                    Id    = Guid.NewGuid().ToString(),
                    Name  = name,
                    Link  = link,
                    Price = price,
                };

                if (!Validation.TryValidate(track))
                {
                    return(false);
                }

                AlbumTrack albumTrack = new AlbumTrack()
                {
                    Track   = track,
                    AlbumId = albumId
                };

                db.AlbumsTracks.Add(albumTrack);

                db.SaveChanges();

                return(true);
            }
        }
示例#16
0
        public IHttpResponse RegisterPost(IHttpRequest httpRequest)
        {
            using (var context = new RunesDbContext())
            {
                string username        = ((IList <string>)httpRequest.FormData["username"]).FirstOrDefault();
                string email           = ((IList <string>)httpRequest.FormData["email"]).FirstOrDefault();
                string password        = ((IList <string>)httpRequest.FormData["password"]).FirstOrDefault();
                string confirmPassword = ((IList <string>)httpRequest.FormData["confirmPassword"]).FirstOrDefault();

                if (password != confirmPassword)
                {
                    return(this.Redirect("/Users/Register"));
                }

                User user = new User()
                {
                    Username = username,
                    Email    = email,
                    Password = this.HashPassword(password)
                };

                context.Users.Add(user);
                context.SaveChanges();
            }

            return(this.Redirect("/Users/Login"));
        }
示例#17
0
        public IHttpResponse All(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                ICollection <Album> allAlbums = context.Albums.ToList();
                if (allAlbums.Count == 0)
                {
                    this.ViewData["Albums"] = "There are currently no albums.";
                }
                else
                {
                    this.ViewData["Albums"] =
                        string.Join("<br />",
                                    allAlbums.Select(album => album.ToHtmlAll()).ToList());
                }


                return(this.View());
            }
        }
        public bool CreateUser(RegisterViewModel registerModel)
        {
            User user = new User()
            {
                Username       = registerModel.Username,
                Id             = Guid.NewGuid().ToString(),
                HashedPassword = this.hashService.StrongHash(registerModel.Password),
                Email          = registerModel.Email
            };

            using (RunesDbContext db = new RunesDbContext())
            {
                if (db.Users.Any(u => u.Username == user.Username ||
                                 u.Email == user.Email))
                {
                    return(false);
                }

                try
                {
                    db.Users.Add(user);
                    db.SaveChanges();
                    return(true);
                }

                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
        }
示例#19
0
        public IHttpResponse Details(IHttpRequest request)
        {
            if (!this.IsLoggedIn(request))
            {
                return(this.Redirect("/Users/Login"));
            }

            string albumId = request.QueryData["id"].ToString();

            using (var context = new RunesDbContext())
            {
                Album albumFromDb = context.Albums
                                    .Include(a => a.Tracks)
                                    .FirstOrDefault(a => a.Id == albumId);

                if (albumFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                this.ViewData["Album"] = albumFromDb.ToHtmlDetails();
            }


            return(this.View());
        }
示例#20
0
        public async Task SeedAsync(RunesDbContext dbContext, IServiceProvider serviceProvider)
        {
            if (dbContext == null)
            {
                throw new ArgumentNullException(nameof(dbContext));
            }

            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            var logger = serviceProvider.GetService <ILoggerFactory>().CreateLogger(typeof(ApplicationDbContextSeeder));

            var seeders = new List <ISeeder>
            {
                new RolesSeeder(),
                new SettingsSeeder(),
            };

            foreach (var seeder in seeders)
            {
                await seeder.SeedAsync(dbContext, serviceProvider);

                await dbContext.SaveChangesAsync();

                logger.LogInformation($"Seeder {seeder.GetType().Name} done.");
            }
        }
示例#21
0
        public IHttpResponse CreateConfirm(IHttpRequest httpRequest)
        {
            if (!this.IsLogedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                Album album = new Album()
                {
                    Name  = httpRequest.FormData["name"].ToString(),
                    Cover = httpRequest.FormData["cover"].ToString()
                };

                if (album == null)
                {
                    return(this.Redirect("/Albums/Create"));
                }

                context.Albums.Add(album);
                context.SaveChanges();
            }

            return(this.Redirect("/Albums/All"));
        }
示例#22
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            var albumId = int.Parse(httpRequest.QueryData["id"].ToString());

            using (var db = new RunesDbContext())
            {
                var albumFromDb = db
                                  .Albums
                                  .Include(x => x.Tracks)
                                  .SingleOrDefault(x => x.Id == albumId);

                if (albumFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                this.ViewData["album"] = albumFromDb.ToHtmlDetails();
            }

            return(this.View());
        }
示例#23
0
        public void Configure(ServerRoutingTable serverRoutingTable)
        {
            using (var context = new RunesDbContext())
            {
                context.Database.EnsureCreated();
            }


            ////Index Routes
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/", request => new RedirectResult("Home/Index"));
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Home/Index", request => new HomeController().Index(request));

            ////Users Routes
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Users/Login", request => new UsersController().Login());
            //serverRoutingTable.Add(HttpRequestMethod.Post, "/Users/Login", request => new UsersController().LoginConfirm(request));

            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Users/Register", request => new UsersController().Register());
            //serverRoutingTable.Add(HttpRequestMethod.Post, "/Users/Register", request => new UsersController().RegisterConfirm(request));

            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Users/Logout", request => new UsersController().Logout(request));

            ////Track Routes
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Track/Create", request => new TrackController().Create(request));
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Track/Details", request => new TrackController().Details(request));
            //serverRoutingTable.Add(HttpRequestMethod.Post, "/Track/Create", request => new TrackController().CreateConfirm(request));


            ////Albums Routes
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Albums/All", request => new AlbumsController().AllAlbums(request));
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Albums/Create", request => new AlbumsController().Create(request));
            //serverRoutingTable.Add(HttpRequestMethod.Post, "/Albums/Create", request => new AlbumsController().CreateConfirm(request));
            //serverRoutingTable.Add(HttpRequestMethod.Get, "/Albums/Details", request => new AlbumsController().Details(request));
        }
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("../Users/Login"));
            }

            var albumId = httpRequest.QueryData["albumId"].ToString();
            var trackId = httpRequest.QueryData["trackId"].ToString();

            using (var db = new RunesDbContext())
            {
                var albumFromDb = db.Albums.Find(albumId);
                var trackFromDb = db.Tracks.Find(trackId);

                if (albumFromDb == null || trackFromDb == null)
                {
                    return(this.Redirect("../Albums/All"));
                }
                this.ViewData["Link"]    = WebUtility.UrlDecode(trackFromDb.Link);
                this.ViewData["AlbumId"] = albumId;
                this.ViewData["Name"]    = trackFromDb.Name;
                this.ViewData["Price"]   = trackFromDb.Price;
            }

            return(this.View());
        }
示例#25
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            string albumId = httpRequest.QueryData["albumId"].ToString();
            string trackId = httpRequest.QueryData["trackId"].ToString();

            using (var context = new RunesDbContext())
            {
                Track trackFromDb = context.Tracks.SingleOrDefault(track => track.Id == trackId);

                if (trackFromDb == null)
                {
                    return(this.Redirect($"/Albums/Details?id={albumId}"));
                }

                this.ViewData["AlbumId"] = albumId;
                this.ViewData["Track"]   = trackFromDb.ToHtmlDetails(albumId);

                return(this.View());
            }
        }
示例#26
0
        public IHttpResponse Details(IHttpRequest httpRequest)
        {
            if (!this.IsLoggedIn(httpRequest))
            {
                return(this.Redirect("/Users/Login"));
            }

            using (var context = new RunesDbContext())
            {
                var albumId = httpRequest.QueryData["albumId"].ToString();
                var trackId = httpRequest.QueryData["trackId"].ToString();

                var albumFromDb = context.Albums.FirstOrDefault(x => x.Id == albumId);
                var trackFromDb = context.Tracks.FirstOrDefault(x => x.Id == trackId);

                if (albumFromDb == null || trackFromDb == null)
                {
                    return(this.Redirect("/Albums/All"));
                }

                this.ViewData["TrackName"]  = WebUtility.UrlDecode(trackFromDb.Name);
                this.ViewData["TrackLink"]  = WebUtility.UrlDecode(trackFromDb.Link);
                this.ViewData["TrackPrice"] = $"${trackFromDb.Price:f2}";
                this.ViewData["AlbumId"]    = albumFromDb.Id;

                return(this.View());
            }
        }
 public IHttpResponse All(IHttpRequest httpRequest)
 {
     using (var context = new RunesDbContext())
     {
         this.ViewData["Albums"] = context.Albums.Select(album => album).ToList();
         return(this.View());
     }
 }
 public Track GetById(string trackId)
 {
     using (RunesDbContext db = new RunesDbContext())
     {
         return(db
                .Tracks
                .SingleOrDefault(t => t.Id == trackId));
     }
 }
示例#29
0
 public List <Album> GetAll()
 {
     using (RunesDbContext db = new RunesDbContext())
     {
         return(db
                .Albums
                .ToList());
     }
 }
示例#30
0
        public List <Album> GetAllAlbums()
        {
            using (var context = new RunesDbContext())
            {
                var allAlbums = context.Albums.ToList();

                return(allAlbums);
            }
        }