Basic search outline config UI implemented.
This commit is contained in:
@@ -1,24 +1,38 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Props.Models.Search;
|
||||
using Props.Services.Modules;
|
||||
using Props.Shop.Framework;
|
||||
|
||||
namespace Props.Controllers
|
||||
{
|
||||
public class SearchController : ApiControllerBase
|
||||
{
|
||||
private SearchOutline defaultOutline = new SearchOutline();
|
||||
IShopManager shopManager;
|
||||
ISearchManager searchManager;
|
||||
|
||||
public SearchController(IShopManager shopManager)
|
||||
public SearchController(ISearchManager searchManager)
|
||||
{
|
||||
this.shopManager = shopManager;
|
||||
this.searchManager = searchManager;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("Available")]
|
||||
public IActionResult GetAvailableShops()
|
||||
[Route("AvailableShops")]
|
||||
public async Task<IActionResult> GetAvailableShops()
|
||||
{
|
||||
return Ok(shopManager.GetAllShopNames());
|
||||
return Ok(await searchManager.ShopManager.GetAllShopNames());
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("SearchShops/{search}/")]
|
||||
public async Task<IActionResult> GetSearch(string searchQuery, [FromQuery] SearchOutline searchOutline)
|
||||
{
|
||||
if (searchQuery == null) return BadRequest();
|
||||
|
||||
return Ok(await searchManager.Search(searchQuery, searchOutline));
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,37 +1,211 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Props.Data;
|
||||
using Props.Models.Search;
|
||||
using Props.Services.Modules;
|
||||
using Props.Models.User;
|
||||
using Props.Shop.Framework;
|
||||
|
||||
namespace Props.Controllers
|
||||
{
|
||||
public class SearchOutlineController : ApiControllerBase
|
||||
{
|
||||
private SearchOutline defaultOutline = new SearchOutline();
|
||||
|
||||
|
||||
public SearchOutlineController()
|
||||
private ApplicationDbContext dbContext;
|
||||
private UserManager<ApplicationUser> userManager;
|
||||
public SearchOutlineController(UserManager<ApplicationUser> userManager, ApplicationDbContext dbContext)
|
||||
{
|
||||
this.userManager = userManager;
|
||||
this.dbContext = dbContext;
|
||||
}
|
||||
|
||||
[HttpDelete]
|
||||
[Authorize]
|
||||
[Route("{name:required}")]
|
||||
public async Task<IActionResult> DeleteSearchOutline(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
return BadRequest();
|
||||
}
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
SearchOutlinePreferences searchOutlinePrefs = user.searchOutlinePreferences;
|
||||
searchOutlinePrefs.SearchOutlines.Remove(searchOutlinePrefs.SearchOutlines.Single((outline) => name.Equals(outline.Name)));
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Authorize]
|
||||
[Route("{name:required}")]
|
||||
public async Task<IActionResult> PostSearchOutline(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) return BadRequest();
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
SearchOutline searchOutline = user.searchOutlinePreferences.SearchOutlines.SingleOrDefault((outline) => name.Equals(outline.Name));
|
||||
if (searchOutline != null) return BadRequest();
|
||||
searchOutline = new SearchOutline();
|
||||
searchOutline.Name = name;
|
||||
user.searchOutlinePreferences.SearchOutlines.Add(searchOutline);
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut]
|
||||
[Authorize]
|
||||
[Route("{name:required}/Filters")]
|
||||
public async Task<IActionResult> PutFilters(string name, Filters filters)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) return BadRequest();
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
SearchOutline searchOutline = await GetSearchOutlineByName(name);
|
||||
if (searchOutline == null) return BadRequest();
|
||||
searchOutline.Filters = filters;
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut]
|
||||
[Authorize]
|
||||
[Route("{outlineName:required}/DisabledShops")]
|
||||
public async Task<IActionResult> PutShopSelection(string outlineName, ISet<string> disabledShops)
|
||||
{
|
||||
if (string.IsNullOrEmpty(outlineName)) return BadRequest();
|
||||
if (disabledShops == null) return BadRequest();
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
SearchOutline searchOutline = await GetSearchOutlineByName(outlineName);
|
||||
if (searchOutline == null) return BadRequest();
|
||||
|
||||
searchOutline.DisabledShops.Clear();
|
||||
searchOutline.DisabledShops.UnionWith(disabledShops);
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut]
|
||||
[Authorize]
|
||||
[Route("{oldName:required}/Name/{newName:required}")]
|
||||
public async Task<IActionResult> PutName(string oldName, string newName)
|
||||
{
|
||||
if (oldName == newName) return BadRequest();
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
SearchOutline outline = await GetSearchOutlineByName(oldName);
|
||||
if (outline == null) return BadRequest();
|
||||
if (user.searchOutlinePreferences.SearchOutlines.Any((outline) => outline.Name.Equals(newName))) return BadRequest();
|
||||
outline.Name = newName;
|
||||
if (user.searchOutlinePreferences.NameOfLastUsed == oldName)
|
||||
{
|
||||
user.searchOutlinePreferences.NameOfLastUsed = newName;
|
||||
}
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut]
|
||||
[Authorize]
|
||||
[Route("{name:required}/LastUsed")]
|
||||
public async Task<IActionResult> PutLastUsed(string name)
|
||||
{
|
||||
SearchOutline outline = await GetSearchOutlineByName(name);
|
||||
if (outline == null) return BadRequest();
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
user.searchOutlinePreferences.NameOfLastUsed = name;
|
||||
await userManager.UpdateAsync(user);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("Filters")]
|
||||
public IActionResult GetFilters()
|
||||
[Authorize]
|
||||
[Route("{name:required}/Filters")]
|
||||
public async Task<IActionResult> GetFilters(string name)
|
||||
{
|
||||
return Ok(defaultOutline.Filters);
|
||||
Filters filters = (await GetSearchOutlineByName(name))?.Filters;
|
||||
if (filters == null) return BadRequest();
|
||||
return Ok(filters);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("DisabledShops")]
|
||||
public IActionResult GetDisabledShops()
|
||||
[Authorize]
|
||||
[Route("{name:required}/DisabledShops")]
|
||||
public async Task<IActionResult> GetDisabledShops(string name)
|
||||
{
|
||||
return Ok(defaultOutline.Enabled);
|
||||
SearchOutline searchOutline = await GetSearchOutlineByName(name);
|
||||
if (searchOutline == null)
|
||||
{
|
||||
return BadRequest();
|
||||
}
|
||||
return Ok(searchOutline.DisabledShops);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("SearchOutlineName")]
|
||||
public IActionResult GetSearchOutlineName()
|
||||
[Authorize]
|
||||
[Route("Names")]
|
||||
public async Task<IActionResult> GetSearchOutlineNames()
|
||||
{
|
||||
return Ok(defaultOutline.Name);
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
return Ok(user.searchOutlinePreferences.SearchOutlines.Select((outline, Index) => outline.Name));
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Authorize]
|
||||
[Route("LastUsed")]
|
||||
public async Task<IActionResult> GetLastSearchOutlineName()
|
||||
{
|
||||
SearchOutline searchOutline = await GetLastUsedSearchOutline();
|
||||
|
||||
return Ok(searchOutline?.Name);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("DefaultDisabledShops")]
|
||||
public IActionResult GetDefaultDisabledShops()
|
||||
{
|
||||
return Ok(new SearchOutline.ShopSelector());
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("DefaultFilters")]
|
||||
public IActionResult GetDefaultFilter()
|
||||
{
|
||||
return Ok(new Filters());
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("DefaultName")]
|
||||
public async Task<IActionResult> GetDefaultName()
|
||||
{
|
||||
string nameTemplate = "Search Outline {0}";
|
||||
if (User.Identity.IsAuthenticated)
|
||||
{
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
int number = user.searchOutlinePreferences.SearchOutlines.Count;
|
||||
string name = null;
|
||||
do
|
||||
{
|
||||
name = string.Format(nameTemplate, number);
|
||||
number += 1;
|
||||
} while (user.searchOutlinePreferences.SearchOutlines.Any((outline) => name.Equals(outline.Name)));
|
||||
return Ok(name);
|
||||
}
|
||||
return Ok("Search Outline");
|
||||
}
|
||||
|
||||
private async Task<SearchOutline> GetLastUsedSearchOutline()
|
||||
{
|
||||
if (!User.Identity.IsAuthenticated) return null;
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
return user.searchOutlinePreferences.SearchOutlines.SingleOrDefault((outline) => outline.Name.Equals(user.searchOutlinePreferences.NameOfLastUsed));
|
||||
}
|
||||
|
||||
private async Task<SearchOutline> GetSearchOutlineByName(string name)
|
||||
{
|
||||
if (name == null) throw new ArgumentNullException("name");
|
||||
if (!User.Identity.IsAuthenticated) return null;
|
||||
ApplicationUser user = await userManager.GetUserAsync(User);
|
||||
return user.searchOutlinePreferences.SearchOutlines.SingleOrDefault(outline => outline.Name.Equals(name));
|
||||
}
|
||||
}
|
||||
}
|
14
Props/Controllers/UserController.cs
Normal file
14
Props/Controllers/UserController.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Props.Controllers
|
||||
{
|
||||
public class UserController : ApiControllerBase
|
||||
{
|
||||
[HttpGet]
|
||||
[Route("LoggedIn")]
|
||||
public IActionResult GetLoggedIn()
|
||||
{
|
||||
return Ok(User.Identity.IsAuthenticated);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user