using System; using System.Globalization; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; using System.Web.Routing; using System.Web.UI; using DR.FV2016.Service.Interfaces; using Newtonsoft.Json; namespace DR.FV2016.Web.Controllers { public class CandidateLinkInfoController : Controller { private readonly ICompositeCandidateService _compositeCandidateService; private readonly RouteCollection _routes; private readonly DateTime _createdDate; private readonly string _virtualPath; public CandidateLinkInfoController(ICompositeCandidateService compositeCandidateService) { _compositeCandidateService = compositeCandidateService; _routes = RouteTable.Routes; _virtualPath = HttpRuntime.AppDomainAppVirtualPath; } // GET: CandidateLinkInfo [OutputCache(Location = OutputCacheLocation.Downstream, Duration = 3600)] public ActionResult Index(int page = 0, int size = 0) { var candidates = _compositeCandidateService.GetCandidates().GroupBy(c => c.Id).Select(g => g.FirstOrDefault()).OrderBy(c => c.Name).ToList(); if (page > 0 && size > 0) { candidates = candidates.Skip((page - 1) * size).Take(size).ToList(); } var pages = candidates.Select(candidate => new CandidateLinkInfo { Id = candidate.Id, Name = candidate.Name, PartyName = candidate.Party.Name, PartyLetter = candidate.Party.Letter, ProfileUrl = string.Format("/{0}", ((Route)(_routes["Candidate"])).Url.Replace("{name}", candidate.Name).Replace("{id}", candidate.Id.ToString(CultureInfo.InvariantCulture))), ImageUrl = string.Format("/{0}", ((Route)(_routes["CandidateImage"])).Url.Replace("{name}", candidate.Name).Replace("{id}", candidate.Id.ToString(CultureInfo.InvariantCulture))), Elected = candidate.IsElectedConfirmed }); return Content(JsonConvert.SerializeObject(pages), "application/json", Encoding.UTF8); } private class CandidateLinkInfo { public int Id { get; set; } public string Name { get; set; } public string PartyName { get; set; } public string PartyLetter { get; set; } public string ImageUrl { get; set; } public string ProfileUrl { get; set; } public bool Elected { get; set; } } } }