Optimize view of companies.

This commit is contained in:
2019-05-20 01:44:22 +01:00
parent 43e472732f
commit 11933dbc3d
6 changed files with 78 additions and 44 deletions

View File

@@ -30,8 +30,10 @@
using System.Linq;
using Cicm.Database.Models;
using cicm_web.Models;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace cicm_web.Controllers
{
@@ -56,9 +58,16 @@ namespace cicm_web.Controllers
ViewBag.Letter = id;
ViewBag.WebRootPath = hostingEnvironment.WebRootPath;
return View(id == '\0'
? _context.Companies.ToArray()
: _context.Companies.Where(c => c.Name.StartsWith(id)).ToArray());
if(id == '\0') return RedirectToAction(nameof(Index));
return View(_context.Companies.Include(c => c.Logos).Where(c => c.Name.StartsWith(id)).OrderBy(c => c.Name)
.Select(c => new CompanyViewModel
{
Id = c.Id,
LastLogo = c.Logos.OrderByDescending(l => l.Year).FirstOrDefault().Guid,
Name = c.Name
}).ToList());
}
public IActionResult View(int id)
@@ -77,16 +86,33 @@ namespace cicm_web.Controllers
{
ViewBag.Iso3166 = _context.Iso31661Numeric.FirstOrDefault(i => i.Id == id);
if(ViewBag.Iso3166 is null) RedirectToAction(nameof(Index));
ViewBag.WebRootPath = hostingEnvironment.WebRootPath;
return View(ViewBag.Iso3166 == null
? _context.Companies.ToArray()
: _context.Companies.Where(c => c.CountryId == id).ToArray());
return View(_context.Companies.Include(c => c.Logos).Where(c => c.CountryId == id).OrderBy(c => c.Name)
.Select(c => new CompanyViewModel
{
Id = c.Id,
LastLogo = c.Logos.OrderByDescending(l => l.Year).FirstOrDefault().Guid,
Name = c.Name
}).ToList());
}
public IActionResult Index()
{
ViewBag.WebRootPath = hostingEnvironment.WebRootPath;
return View(_context.Companies.ToArray());
return View(_context.Companies.Include(c => c.Logos).OrderBy(c => c.Name).Select(c => new CompanyViewModel
{
Id = c.Id,
LastLogo = c
.Logos
.OrderByDescending(l =>
l.Year)
.FirstOrDefault()
.Guid,
Name = c.Name
}).ToList());
}
}
}

View File

@@ -0,0 +1,11 @@
using System;
namespace cicm_web.Models
{
public class CompanyViewModel
{
public int Id;
public Guid? LastLogo;
public string Name;
}
}

View File

@@ -32,8 +32,7 @@
ViewData["Title"] = "Companies";
}
@using System.IO
@using Cicm.Database.Models
@model Cicm.Database.Models.Company[]
@model IEnumerable<CompanyViewModel>
<p align="center">
@if(ViewBag.Iso3166 != null)
@@ -63,24 +62,24 @@
{
<p>
@Model.Count() companies found in the database.<br />
@foreach(Company company in Model)
@foreach(CompanyViewModel company in Model)
{
<a asp-controller="Company"
asp-action="View"
asp-route-id="@company.Id">
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo.Guid + ".svg")))
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo + ".svg")))
{
<picture>
<source type="image/svg+xml"
srcset="/assets/logos/@(company.LastLogo.Guid).svg">
srcset="/assets/logos/@(company.LastLogo).svg">
<source type="image/webp"
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo.Guid).png")
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo).png")
alt=""
height="auto"
width="auto"

View File

@@ -32,8 +32,7 @@
ViewData["Title"] = "Companies";
}
@using System.IO
@using Cicm.Database.Models
@model Cicm.Database.Models.Company[]
@model IEnumerable<CompanyViewModel>
<p>Search results:</p>
<p align="center">
@@ -47,24 +46,24 @@
{
<p>
@Model.Count() companies found in the database.<br />
@foreach(Company company in Model)
@foreach(CompanyViewModel company in Model)
{
<a asp-controller="Company"
asp-action="View"
asp-route-id="@company.Id">
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo.Guid + ".svg")))
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo + ".svg")))
{
<picture>
<source type="image/svg+xml"
srcset="/assets/logos/@(company.LastLogo.Guid).svg">
srcset="/assets/logos/@(company.LastLogo).svg">
<source type="image/webp"
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo.Guid).png")
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo).png")
alt=""
height="auto"
width="auto"

View File

@@ -32,32 +32,31 @@
ViewData["Title"] = "Companies";
}
@using System.IO
@using Cicm.Database.Models
@model Cicm.Database.Models.Company[]
@model IEnumerable<CompanyViewModel>
<p align="center">
@if(Model.Any())
{
<p>
@Model.Count() companies found in the database.<br />
@foreach(Company company in Model)
@foreach(CompanyViewModel company in Model)
{
<a asp-controller="Company"
asp-action="View"
asp-route-id="@company.Id">
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo.Guid + ".svg")))
@if(company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", company.LastLogo + ".svg")))
{
<picture>
<source type="image/svg+xml"
srcset="/assets/logos/@(company.LastLogo.Guid).svg">
srcset="/assets/logos/@(company.LastLogo).svg">
<source type="image/webp"
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo.Guid).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo.Guid).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo.Guid).png")
srcset="/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 2x,
/assets/logos/thumbs/webp/1x/@(company.LastLogo).webp 3x">
<img srcset="/assets/logos/thumbs/png/1x/@(company.LastLogo).png,
/assets/logos/thumbs/png/1x/@(company.LastLogo).png 2x,
/assets/logos/thumbs/png/1x/@(company.LastLogo).webp 3x"
src="/assets/logos/thumbs/png/1x@(company.LastLogo).png")
alt=""
height="auto"
width="auto"

View File

@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<Version>3.0.99.550</Version>
<Version>3.0.99.557</Version>
<Company>Canary Islands Computer Museum</Company>
<Copyright>Copyright © 2003-2018 Natalia Portillo</Copyright>
<Product>Canary Islands Computer Museum Website</Product>