Feature: Quick Search

Device/Job/User Search refactoring. Quick-Search implemented.
This commit is contained in:
Gary Sharp
2014-02-06 16:11:45 +11:00
parent 9ea0273936
commit cd31ba4a6c
53 changed files with 1045 additions and 470 deletions
+2 -1
View File
@@ -35,7 +35,8 @@ namespace Disco.Web.Areas.API
context.MapRoute(
"API_default",
"API/{controller}/{action}/{id}",
new { id = UrlParameter.Optional }
new { id = UrlParameter.Optional },
new string[] { "Disco.Web.Areas.API.Controllers" }
);
}
}
@@ -324,13 +324,13 @@ namespace Disco.Web.Areas.API.Controllers
switch (searchScope)
{
case DocumentTemplate.DocumentTemplateScopes.Device:
results = BI.DeviceBI.Searching.Search(Database, term, limitCount).Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
results = Disco.Services.Searching.Search.SearchDevices(Database, term, limitCount).Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
break;
case DocumentTemplate.DocumentTemplateScopes.Job:
results = BI.JobBI.Searching.Search(Database, term, limitCount, false).Items.Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
results = Disco.Services.Searching.Search.SearchJobsTable(Database, term, limitCount, false).Items.Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
break;
case DocumentTemplate.DocumentTemplateScopes.User:
results = BI.UserBI.Searching.Search(Database, term, limitCount).Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
results = Disco.Services.Searching.Search.SearchUsers(Database, term, limitCount).Select(sr => Models.DocumentTemplate.ImporterUndetectedDataIdLookupModel.FromSearchResultItem(sr)).ToArray();
break;
default:
results = null;
@@ -0,0 +1,50 @@
using Disco.Models.Services.Searching;
using Disco.Services.Authorization;
using Disco.Services.Searching;
using Disco.Services.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Disco.Web.Areas.API.Controllers
{
public partial class SearchController : AuthorizedDatabaseController
{
[DiscoAuthorizeAny(Claims.Job.Search, Claims.Device.Search, Claims.User.Search)]
public virtual ActionResult QuickQuery(string Term, int Limit = 15)
{
if (string.IsNullOrWhiteSpace(Term))
throw new ArgumentNullException("Term", "The search query term is required");
if (Term.Length < 2)
throw new ArgumentException("The search query term must be at least two characters", "Term");
if (Limit < 1)
throw new ArgumentException("The search query limit cannot be less than 1", "Limit");
IEnumerable<ISearchResultItem> results = Enumerable.Empty<ISearchResultItem>();
if (Authorization.Has(Claims.Job.Search))
{
var jobMatches = Search.SearchJobs(Database, Term, Limit);
results = results.Concat(jobMatches);
}
if (Authorization.Has(Claims.User.Search))
{
var userMatches = Search.SearchUsers(Database, Term, Limit);
results = results.Concat(userMatches);
}
if (Authorization.Has(Claims.Device.Search))
{
var deviceMatches = Search.SearchDevices(Database, Term, Limit);
results = results.Concat(deviceMatches);
}
results = results.OrderByDescending(i => i.ScoreValue.Score(Term, .5)).Take(Limit);
return Json(results, JsonRequestBehavior.AllowGet);
}
}
}
@@ -14,7 +14,7 @@ namespace Disco.Web.Areas.API.Controllers
[DiscoAuthorize(Claims.User.Search)]
public virtual ActionResult UpstreamUsers(string term)
{
return Json(BI.UserBI.Searching.SearchUpstream(term), JsonRequestBehavior.AllowGet);
return Json(Disco.Services.Searching.Search.SearchUsersUpstream(term), JsonRequestBehavior.AllowGet);
}
#region User Attachements
@@ -1,5 +1,5 @@
using Disco.Models.BI.Search;
using Disco.Models.Services.Jobs.JobLists;
using Disco.Models.Services.Jobs.JobLists;
using Disco.Models.Services.Searching;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -12,20 +12,20 @@ namespace Disco.Web.Areas.API.Models.DocumentTemplate
public string value { get; set; }
public string label { get; set; }
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(Disco.Models.BI.Search.DeviceSearchResultItem item)
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(DeviceSearchResultItem item)
{
return new ImporterUndetectedDataIdLookupModel
{
value = item.SerialNumber,
label = string.Format("{0} - {1} - {2}", item.SerialNumber, item.ComputerName, item.DeviceModelDescription)
value = item.Id,
label = string.Format("{0} - {1} - {2}", item.Id, item.ComputerName, item.DeviceModelDescription)
};
}
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(JobTableItemModel item)
{
return new ImporterUndetectedDataIdLookupModel
{
value = item.Id.ToString(),
label = string.Format("{0} ({1}; {2})", item.Id, item.DeviceSerialNumber, item.UserDisplayName)
value = item.JobId.ToString(),
label = string.Format("{0} ({1}; {2})", item.JobId, item.DeviceSerialNumber, item.UserDisplayName)
};
}
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(UserSearchResultItem item)