Skip to content

Commit

Permalink
Added search for missing data endpoint to API, solves #27
Browse files Browse the repository at this point in the history
  • Loading branch information
gingters committed Apr 20, 2017
1 parent 0201fb0 commit dd48b30
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
Expand Down Expand Up @@ -140,5 +139,11 @@ public async Task<ActionResult> SaveActiveObelisksForSite(int id, [FromBody] Obe
? (ActionResult)Ok()
: NotFound();
}

[HttpGet("searchdata/{categoryName}/{entryNumber}")]
public async Task<List<RuinSite>> SearchForDataEntries(string categoryName, int entryNumber)
{
return await Repository.SearchSitesForData(categoryName, entryNumber);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ public interface IRuinSiteRepository: IBaseDataRepository<RuinSite>

Task<bool> SaveObeliskGroupsForSite(int siteId, IEnumerable<ObeliskGroup> obeliskGroups);
Task<bool> SaveActiveObelisksForSite(int siteId, IEnumerable<Obelisk> obelisks);
Task<List<RuinSite>> SearchSitesForData(string categoryName, int entryNumber);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,25 @@ public async Task<bool> SaveActiveObelisksForSite(int siteId, IEnumerable<Obelis
return true;
}

public async Task<List<RuinSite>> SearchSitesForData(string categoryName, int entryNumber)
{
var siteIds = (IEnumerable<int>)await RuinsContext.Obelisk
.Where(o => o.Codexdata.Category.Name == categoryName && o.Codexdata.EntryNumber == entryNumber)
.SelectMany(o => o.RuinsiteActiveobelisks)
.Select(rsao => rsao.RuinsiteId)
.ToArrayAsync();

siteIds = siteIds
.Where(id => id < 99997) // exclude reference sites
.ToImmutableHashSet();

return await RuinsContext.RuinSite
.Include(site => site.Body.System)
.Include(site => site.Ruintype)
.Where(site => siteIds.Contains(site.Id))
.ToListAsync();
}

public override Task<bool> DeleteById(int id)
{
RuinsContext.RemoveRange(RuinsContext.RuinsiteObeliskgroups.Where(rsog => rsog.RuinsiteId == id));
Expand Down
6 changes: 5 additions & 1 deletion CanonnApi.Backend/CanonnApi.Web/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
}));

services.AddMvc()
.AddJsonOptions(mvcJsonOptions => mvcJsonOptions.SerializerSettings.ContractResolver = new IgnoreEmptyEnumerablesResolver());
.AddJsonOptions(mvcJsonOptions =>
{
mvcJsonOptions.SerializerSettings.ContractResolver = new IgnoreEmptyEnumerablesResolver();
mvcJsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});

services.AddLogging();
services.AddMemoryCache();
Expand Down

0 comments on commit dd48b30

Please sign in to comment.