best quotes
This commit is contained in:
		
							parent
							
								
									babf23af24
								
							
						
					
					
						commit
						6dc4c4d945
					
				@ -28,6 +28,19 @@ namespace VideoGameQuotes.Web.Controllers {
 | 
				
			|||||||
			return View(new QuoteCollectionModel { Quotes = quotes, User = currentUserProvider.CurrentUser });
 | 
								return View(new QuoteCollectionModel { Quotes = quotes, User = currentUserProvider.CurrentUser });
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public ActionResult Best(int start = 0, int end = 19) {
 | 
				
			||||||
 | 
								if (start < 0 || end <= 0 || start > end) {
 | 
				
			||||||
 | 
									return new StatusOverrideResult(View("BadPaging")) { StatusCode = HttpStatusCode.BadRequest };
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return View(new PagedQuoteCollectionModel { 
 | 
				
			||||||
 | 
									Quotes = quoteService.GetBestQuotes(start, end), 
 | 
				
			||||||
 | 
									User = currentUserProvider.CurrentUser,
 | 
				
			||||||
 | 
									Start = start,
 | 
				
			||||||
 | 
									End = end
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public ActionResult Random() {
 | 
							public ActionResult Random() {
 | 
				
			||||||
			var quote = quoteService.GetRandomQuote();
 | 
								var quote = quoteService.GetRandomQuote();
 | 
				
			||||||
			if (quote == null) {
 | 
								if (quote == null) {
 | 
				
			||||||
 | 
				
			|||||||
@ -38,6 +38,7 @@ namespace VideoGameQuotes.Web {
 | 
				
			|||||||
			routes.IgnoreRoute("media/{*anything}");
 | 
								routes.IgnoreRoute("media/{*anything}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			routes.MapRoute("home", "{action}", new { controller = "Home", action = "Index" }, new { action = "about|contact" });
 | 
								routes.MapRoute("home", "{action}", new { controller = "Home", action = "Index" }, new { action = "about|contact" });
 | 
				
			||||||
 | 
								routes.MapRoute("best", "best/{start}-{end}/", new { controller = "Quote", action = "Best" }, new { start = @"\d+", end = @"\d+" });
 | 
				
			||||||
			routes.MapRoute("quote", "{action}", new { controller = "Quote" }, new { action = "submit|search|recent|random|best" });
 | 
								routes.MapRoute("quote", "{action}", new { controller = "Quote" }, new { action = "submit|search|recent|random|best" });
 | 
				
			||||||
			routes.MapRoute("individual-quote", "quote/{id}/{*text}", new { controller = "Quote", action = "Quote" }, new { id = @"\d+" });
 | 
								routes.MapRoute("individual-quote", "quote/{id}/{*text}", new { controller = "Quote", action = "Quote" }, new { id = @"\d+" });
 | 
				
			||||||
			routes.MapRoute("create-category", "category/create", new { controller = "Quote", action = "CreateCategory" });
 | 
								routes.MapRoute("create-category", "category/create", new { controller = "Quote", action = "CreateCategory" });
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using JetBrains.Annotations;
 | 
					using JetBrains.Annotations;
 | 
				
			||||||
using VideoGameQuotes.Api;
 | 
					using VideoGameQuotes.Api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -9,6 +10,17 @@ namespace VideoGameQuotes.Web.Models {
 | 
				
			|||||||
		public User User { get; set; }
 | 
							public User User { get; set; }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public class PagedQuoteCollectionModel : QuoteCollectionModel {
 | 
				
			||||||
 | 
							public int Start { get; set; }
 | 
				
			||||||
 | 
							public int End { get; set; }
 | 
				
			||||||
 | 
							public int PageSize { get { return End - Start + 1; } }
 | 
				
			||||||
 | 
							public int NextStart { get { return End + 1; } }
 | 
				
			||||||
 | 
							public int NextEnd { get { return End + PageSize; } }
 | 
				
			||||||
 | 
							public int PreviousStart { get { return Math.Max(0, Start - PageSize); } }
 | 
				
			||||||
 | 
							public int PreviousEnd { get { return Math.Max(PageSize - 1, End - PageSize); } }
 | 
				
			||||||
 | 
							public bool HasPrevious { get { return Start > 0; } }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class QuoteModel {
 | 
						public class QuoteModel {
 | 
				
			||||||
		[NotNull]
 | 
							[NotNull]
 | 
				
			||||||
		public Quote Quote { get; set; }
 | 
							public Quote Quote { get; set; }
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ namespace VideoGameQuotes.Web.Services {
 | 
				
			|||||||
		IEnumerable<Quote> GetMostRecentQuotes(int limit);
 | 
							IEnumerable<Quote> GetMostRecentQuotes(int limit);
 | 
				
			||||||
		[CanBeNull]
 | 
							[CanBeNull]
 | 
				
			||||||
		Quote GetRandomQuote();
 | 
							Quote GetRandomQuote();
 | 
				
			||||||
 | 
							IEnumerable<Quote> GetBestQuotes(int start, int end);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class QuoteService : IQuoteService {
 | 
						public class QuoteService : IQuoteService {
 | 
				
			||||||
@ -115,5 +116,15 @@ namespace VideoGameQuotes.Web.Services {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			return quotes[new Random().Next(quotes.Length)];
 | 
								return quotes[new Random().Next(quotes.Length)];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[UnitOfWork]
 | 
				
			||||||
 | 
							public IEnumerable<Quote> GetBestQuotes(int start, int end) {
 | 
				
			||||||
 | 
								var records = quoteRepository.Records.ToArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return records
 | 
				
			||||||
 | 
									.OrderByDescending(quote => quote.UpVotes)
 | 
				
			||||||
 | 
									.Skip(start)
 | 
				
			||||||
 | 
									.Take(end - start + 1);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -116,6 +116,7 @@
 | 
				
			|||||||
    <Content Include="Views\Home\About.aspx" />
 | 
					    <Content Include="Views\Home\About.aspx" />
 | 
				
			||||||
    <Content Include="Views\Home\Contact.aspx" />
 | 
					    <Content Include="Views\Home\Contact.aspx" />
 | 
				
			||||||
    <Content Include="Views\Home\ContactSuccess.aspx" />
 | 
					    <Content Include="Views\Home\ContactSuccess.aspx" />
 | 
				
			||||||
 | 
					    <Content Include="Views\Quote\Best.aspx" />
 | 
				
			||||||
    <Content Include="Views\Quote\NoQuotes.aspx" />
 | 
					    <Content Include="Views\Quote\NoQuotes.aspx" />
 | 
				
			||||||
    <Content Include="Views\Quote\Quote.aspx" />
 | 
					    <Content Include="Views\Quote\Quote.aspx" />
 | 
				
			||||||
    <Content Include="Views\Quote\QuoteNotFound.aspx" />
 | 
					    <Content Include="Views\Quote\QuoteNotFound.aspx" />
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										19
									
								
								Src/VideoGameQuotes.Web/Views/Quote/Best.aspx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Src/VideoGameQuotes.Web/Views/Quote/Best.aspx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<VideoGameQuotes.Web.Models.PagedQuoteCollectionModel>" MasterPageFile="~/Views/Shared/Site.Master" %>
 | 
				
			||||||
 | 
					<%@ Import Namespace="VideoGameQuotes.Web.Models" %>
 | 
				
			||||||
 | 
					<asp:Content runat="server" ID="Title" ContentPlaceHolderID="TitleContent">Best: <%= Model.Start %> – <%= Model.End %></asp:Content>
 | 
				
			||||||
 | 
					<asp:Content runat="server" ID="Main" ContentPlaceHolderID="MainContent">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<p>
 | 
				
			||||||
 | 
						<% if (Model.HasPrevious) { %>
 | 
				
			||||||
 | 
							<%= Html.ActionLink("previous", "best", new { start = Model.PreviousStart, end = Model.PreviousEnd }) %>
 | 
				
			||||||
 | 
						<% } %>
 | 
				
			||||||
 | 
							<%= Html.ActionLink("next", "best", new { start = Model.NextStart, end = Model.NextEnd }) %>
 | 
				
			||||||
 | 
						</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<%
 | 
				
			||||||
 | 
							foreach (var quote in Model.Quotes) {
 | 
				
			||||||
 | 
								Html.RenderPartial("SingleQuote", new QuoteModel { Quote = quote, User = Model.User });
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						%>
 | 
				
			||||||
 | 
					</asp:Content>
 | 
				
			||||||
 | 
					<asp:Content runat="server" ID="DeferrableScripts" ContentPlaceHolderID="DeferrableScripts"></asp:Content>
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user