Added logging to module framework
Implemented logging to Adafruit and changed database loading behavior.
This commit is contained in:
@@ -1,14 +1,15 @@
|
||||
@page
|
||||
@using Props.Services.Content
|
||||
@model IndexModel
|
||||
@inject IContentManager<IndexModel> ContentManager
|
||||
@inject ITextualManager<IndexModel> ContentManager
|
||||
@{
|
||||
ViewData["Title"] = "Home page";
|
||||
}
|
||||
|
||||
<section class="jumbotron d-flex flex-column align-items-center">
|
||||
<div>
|
||||
<img alt="Props logo" src="~/images/logo.svg" class="img-fluid" style="max-height: 540px;" asp-append-version="true" />
|
||||
<img alt="Props logo" src="~/images/logo.svg" class="img-fluid" style="max-height: 540px;"
|
||||
asp-append-version="true" />
|
||||
</div>
|
||||
<div class="text-center px-3 my-2 concise">
|
||||
<h1 class="my-2 display-1">Props</h1>
|
||||
@@ -24,7 +25,8 @@
|
||||
<h2 class="mb-3 mt-4">@ContentManager.Json.help.title</h2>
|
||||
<form class="concise my-4">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" placeholder="What are you looking for?" aria-label="Search" aria-describedby="search-btn">
|
||||
<input type="text" class="form-control" placeholder="What are you looking for?" aria-label="Search"
|
||||
aria-describedby="search-btn">
|
||||
<button class="btn btn-outline-primary" type="button" id="search-btn">Search</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@@ -1,28 +1,26 @@
|
||||
@page
|
||||
@using Props.Services.Content
|
||||
@model SearchModel
|
||||
@inject IContentManager<SearchModel> ContentManager
|
||||
@inject ITextualManager<SearchModel> ContentManager
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Search";
|
||||
ViewData["Specific"] = "Search";
|
||||
}
|
||||
|
||||
<div class="mt-4 mb-3">
|
||||
<div class="less-concise mx-auto">
|
||||
<form method="GET">
|
||||
<div class="mt-4 mb-3 less-concise mx-auto">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control border-primary" placeholder="What are you looking for?"
|
||||
aria-label="Search" aria-describedby="search-btn" id="search-bar" value="@Model.SearchQuery">
|
||||
aria-label="Search" aria-describedby="search-btn" id="search-bar" value="@Model.SearchQuery" name="q">
|
||||
<button class="btn btn-outline-secondary" type="button" id="configuration-toggle" data-bs-toggle="collapse"
|
||||
data-bs-target="#configuration"><i class="bi bi-sliders"></i></button>
|
||||
<button class="btn btn-primary" type="button" id="search-btn">Search</button>
|
||||
<button class="btn btn-primary" type="submit" id="search-btn">Search</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="collapse tear" id="configuration" x-data="configuration">
|
||||
<div class="p-3">
|
||||
<div class="container">
|
||||
<div class="collapse tear" id="configuration">
|
||||
<div class="container my-3">
|
||||
<div class="d-flex">
|
||||
<h1 class="my-2 display-2 me-auto">Configuration</h1>
|
||||
<button class="btn align-self-start" type="button" id="configuration-close" data-bs-toggle="collapse"
|
||||
@@ -36,10 +34,13 @@
|
||||
<div class="input-group">
|
||||
<div class="input-group-text">
|
||||
<input class="form-check-input mt-0" type="checkbox" id="max-price-enabled"
|
||||
x-model="maxPriceEnabled">
|
||||
checked="@Model.ActiveSearchOutline.Filters.EnableUpperPrice"
|
||||
name="ActiveSearchOutline.Filters.EnableUpperPrice">
|
||||
</div>
|
||||
<span class="input-group-text">$</span>
|
||||
<input type="number" class="form-control" min="0" id="max-price" x-model="maxPrice">
|
||||
<input type="number" class="form-control" min="0" id="max-price"
|
||||
value="@Model.ActiveSearchOutline.Filters.UpperPrice"
|
||||
name="ActiveSearchOutline.Filters.UpperPrice">
|
||||
<span class="input-group-text">.00</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -47,7 +48,9 @@
|
||||
<label for="min-price" class="form-label">Minimum Price</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">$</span>
|
||||
<input type="number" class="form-control" min="0" id="min-price" x-model="minPrice">
|
||||
<input type="number" class="form-control" min="0" id="min-price"
|
||||
value="@Model.ActiveSearchOutline.Filters.LowerPrice"
|
||||
name="ActiveSearchOutline.Filters.LowerPrice">
|
||||
<span class="input-group-text">.00</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -55,17 +58,22 @@
|
||||
<label for="max-shipping" class="form-label">Maximum Shipping Fee</label>
|
||||
<div class="input-group">
|
||||
<div class="input-group-text">
|
||||
<input class="form-check-input mt-0" type="checkbox" id="max-shipping-enabled">
|
||||
<input class="form-check-input mt-0" type="checkbox" id="max-shipping-enabled"
|
||||
checked="@Model.ActiveSearchOutline.Filters.EnableMaxShippingFee"
|
||||
name="ActiveSearchOutline.Filters.EnableMaxShippingFee">
|
||||
</div>
|
||||
<span class="input-group-text">$</span>
|
||||
<input type="number" class="form-control" min="0" id="max-shipping" x-model="maxShipping">
|
||||
<input type="number" class="form-control" min="0" id="max-shipping"
|
||||
value="@Model.ActiveSearchOutline.Filters.MaxShippingFee"
|
||||
name="ActiveSearchOutline.Filters.MaxShippingFee">
|
||||
<span class="input-group-text">.00</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="keep-unknown-shipping"
|
||||
x-model="keepUnknownShipping">
|
||||
checked="@Model.ActiveSearchOutline.Filters.KeepUnknownShipping"
|
||||
name="ActiveSearchOutline.Filters.KeepUnknownShipping">
|
||||
<label class="form-check-label" for="keep-unknown-shipping">Keep Unknown Shipping</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -75,28 +83,34 @@
|
||||
<div class="mb-3">
|
||||
<label for="min-purchases" class="form-label">Minimum Purchases</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" min="0" id="min-purchases" x-model="minPurchases">
|
||||
<input type="number" class="form-control" min="0" id="min-purchases"
|
||||
value="@Model.ActiveSearchOutline.Filters.MinPurchases"
|
||||
name="ActiveSearchOutline.Filters.MinPurchases">
|
||||
<span class="input-group-text">Purchases</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="keep-unknown-purchases"
|
||||
x-model="keepUnknownPurchases">
|
||||
checked="@Model.ActiveSearchOutline.Filters.KeepUnknownPurchaseCount"
|
||||
name="ActiveSearchOutline.Filters.KeepUnknownPurchaseCount">
|
||||
<label class="form-check-label" for="keep-unknown-purchases">Keep Unknown Purchases</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="min-reviews" class="form-label">Minimum Reviews</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" min="0" id="min-reviews" x-model="minReviews">
|
||||
<input type="number" class="form-control" min="0" id="min-reviews"
|
||||
value="@Model.ActiveSearchOutline.Filters.MinReviews"
|
||||
name="ActiveSearchOutline.Filters.MinReviews">
|
||||
<span class="input-group-text">Reviews</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="keep-unknown-reviews"
|
||||
x-model="keepUnknownReviews">
|
||||
checked="@Model.ActiveSearchOutline.Filters.KeepUnknownReviewCount"
|
||||
name="ActiveSearchOutline.Filters.KeepUnknownReviewCount">
|
||||
<label class="form-check-label" for="keep-unknown-reviews">Keep Unknown Number of
|
||||
Reviews</label>
|
||||
</div>
|
||||
@@ -104,12 +118,15 @@
|
||||
<div class="mb-1">
|
||||
<label for="min-rating" class="form-label">Minimum Rating</label>
|
||||
<input type="range" class="form-range" id="min-rating" min="0" max="100" step="1"
|
||||
x-model="minRating">
|
||||
<div id="min-rating-display" class="form-text">Minimum rating: <b x-text="minRating"></b>%</div>
|
||||
value="@Model.ActiveSearchOutline.Filters.MinRating"
|
||||
name="ActiveSearchOutline.Filters.MinRating">
|
||||
<div id="min-rating-display" class="form-text"></div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="keep-unrated" x-model="keepUnrated">
|
||||
<input class="form-check-input" type="checkbox" id="keep-unrated"
|
||||
checked="@Model.ActiveSearchOutline.Filters.KeepUnrated"
|
||||
name="ActiveSearchOutline.Filters.KeepUnrated">
|
||||
<label class="form-check-label" for="keep-unrated">Keep Unrated Items</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -117,20 +134,20 @@
|
||||
<section class="col-lg px-4">
|
||||
<h3>Shops Enabled</h3>
|
||||
<div class="mb-3 px-3" id="shop-checkboxes">
|
||||
<template x-for="shop in Object.keys(shops)">
|
||||
@foreach (string shopName in Model.SearchManager.ShopManager.GetAllShopNames())
|
||||
{
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" :id="`${shop}-enabled`"
|
||||
x-model="shops[shop]">
|
||||
<label class="form-check-label" :for="`${shop}-enabled`"><span
|
||||
x-text="shop"></span></label>
|
||||
<input class="form-check-input" type="checkbox" id="@($"{shopName}-enabled")"
|
||||
checked="@Model.ActiveSearchOutline.Enabled[shopName]">
|
||||
<label class="form-check-label" for="@($"{shopName}-enabled")">@shopName</label>
|
||||
</div>
|
||||
</template>
|
||||
}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div id="content-pages" class="multipage mt-3 invisible">
|
||||
<ul class="nav nav-pills selectors">
|
||||
@@ -186,7 +203,10 @@
|
||||
|
||||
@if (Model.BestPrice != null)
|
||||
{
|
||||
<p>Looking for the lowest price? Well here it is.</p>
|
||||
<p>Here's the listing with the lowest price.</p>
|
||||
<div>
|
||||
@Model.BestPrice.Name
|
||||
</div>
|
||||
}
|
||||
|
||||
@* TODO: Add display for top results. *@
|
||||
|
@@ -28,22 +28,24 @@ namespace Props.Pages
|
||||
public ProductListing MostReviews { get; private set; }
|
||||
public ProductListing BestPrice { get; private set; }
|
||||
|
||||
private ISearchManager searchManager;
|
||||
public ISearchManager SearchManager { get; private set; }
|
||||
private UserManager<ApplicationUser> userManager;
|
||||
private IMetricsManager analytics;
|
||||
public SearchOutline ActiveSearchOutline { get; private set; }
|
||||
|
||||
public SearchModel(ISearchManager searchManager, UserManager<ApplicationUser> userManager, IMetricsManager analyticsManager)
|
||||
{
|
||||
this.searchManager = searchManager;
|
||||
this.SearchManager = searchManager;
|
||||
this.userManager = userManager;
|
||||
this.analytics = analyticsManager;
|
||||
}
|
||||
|
||||
public async Task OnGet()
|
||||
public async Task OnGetAsync()
|
||||
{
|
||||
ActiveSearchOutline = User.Identity.IsAuthenticated ? (await userManager.GetUserAsync(User)).searchOutlinePreferences.ActiveSearchOutline : new SearchOutline();
|
||||
if (string.IsNullOrWhiteSpace(SearchQuery)) return;
|
||||
SearchOutline activeSearchOutline = User.Identity.IsAuthenticated ? (await userManager.GetUserAsync(User)).searchOutlinePreferences.ActiveSearchOutline : new SearchOutline();
|
||||
this.SearchResults = searchManager.Search(SearchQuery, activeSearchOutline);
|
||||
Console.WriteLine(SearchQuery);
|
||||
this.SearchResults = await SearchManager.Search(SearchQuery, ActiveSearchOutline);
|
||||
BestRatingPriceRatio = (from result in SearchResults orderby result.GetRatingToPriceRatio() descending select result).FirstOrDefault((listing) => listing.GetRatingToPriceRatio() >= 0.5f);
|
||||
TopRated = (from result in SearchResults orderby result.Rating descending select result).FirstOrDefault();
|
||||
MostPurchases = (from result in SearchResults orderby result.PurchaseCount descending select result).FirstOrDefault();
|
||||
|
Reference in New Issue
Block a user