Make it compile

Any sane person would vomit reading the code in its current state.
This commit is contained in:
Thomas Hounsell 2015-09-08 23:59:52 +01:00
parent 8c8a30b6e6
commit 34141f60f1
11 changed files with 153 additions and 220 deletions

View File

@ -11,22 +11,22 @@ public class metaController : Controller
// GET: admin/meta // GET: admin/meta
public ActionResult index() public ActionResult index()
{ {
var currentItems = from i in MetaItem.Select() var currentItems = from i in new MetaItem().Select()
group i by i.Id.Type group i by i.Id.Type
into b into b
select b; select b;
var pendingLabs = MetaItem.SelectUnusedLabs(); var pendingLabs = new MetaItem().SelectUnusedLabs();
return View(new MetaListing return View(new MetaListing
{ {
CurrentItems = from i in MetaItem.Select() CurrentItems = from i in new MetaItem().Select()
group i by i.Id.Type group i by i.Id.Type
into b into b
orderby b.Key.ToString() orderby b.Key.ToString()
select b, select b,
NewItems = from i in (from l in MetaItem.SelectUnusedLabs() NewItems = from i in (from l in new MetaItem().SelectUnusedLabs()
select new MetaItem select new MetaItemModel
{ {
Id = new MetaItemKey Id = new MetaItemKey
{ {
@ -34,8 +34,8 @@ orderby b.Key.ToString()
Value = l Value = l
} }
}) })
.Concat(from v in MetaItem.SelectUnusedVersions() .Concat(from v in new MetaItem().SelectUnusedVersions()
select new MetaItem select new MetaItemModel
{ {
Id = new MetaItemKey Id = new MetaItemKey
{ {
@ -43,8 +43,8 @@ orderby b.Key.ToString()
Value = v Value = v
} }
}) })
.Concat(from y in MetaItem.SelectUnusedYears() .Concat(from y in new MetaItem().SelectUnusedYears()
select new MetaItem select new MetaItemModel
{ {
Id = new MetaItemKey Id = new MetaItemKey
{ {
@ -61,7 +61,7 @@ select b
public ActionResult create(MetaType type, string value) public ActionResult create(MetaType type, string value)
{ {
return View(new MetaItem return View(new MetaItemModel
{ {
Id = new MetaItemKey Id = new MetaItemKey
{ {
@ -72,11 +72,11 @@ public ActionResult create(MetaType type, string value)
} }
[HttpPost] [HttpPost]
public ActionResult create(MetaItem meta) public ActionResult create(MetaItemModel meta)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
MetaItem.Insert(meta); new MetaItem().Insert(meta);
return RedirectToAction("index"); return RedirectToAction("index");
} }
@ -85,7 +85,7 @@ public ActionResult create(MetaItem meta)
public ActionResult edit(MetaType type, string value) public ActionResult edit(MetaType type, string value)
{ {
return View("create", MetaItem.SelectById(new MetaItemKey return View("create", new MetaItem().SelectById(new MetaItemKey
{ {
Type = type, Type = type,
Value = value Value = value
@ -93,11 +93,11 @@ public ActionResult edit(MetaType type, string value)
} }
[HttpPost] [HttpPost]
public ActionResult edit(MetaItem meta) public ActionResult edit(MetaItemModel meta)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
MetaItem.Update(meta); new MetaItem().Update(meta);
return RedirectToAction("index"); return RedirectToAction("index");
} }

View File

@ -6,7 +6,7 @@ namespace BuildFeed.Areas.admin.Models.ViewModel
{ {
public class MetaListing public class MetaListing
{ {
public IEnumerable<IGrouping<MetaType, MetaItem>> CurrentItems { get; set; } public IEnumerable<IGrouping<MetaType, MetaItemModel>> CurrentItems { get; set; }
public IEnumerable<IGrouping<MetaType, MetaItem>> NewItems { get; set; } public IEnumerable<IGrouping<MetaType, MetaItemModel>> NewItems { get; set; }
} }
} }

View File

@ -195,7 +195,6 @@
<Compile Include="App_Start\RouteConfig.cs" /> <Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="Areas\admin\adminAreaRegistration.cs" /> <Compile Include="Areas\admin\adminAreaRegistration.cs" />
<Compile Include="Areas\admin\Controllers\usersController.cs" /> <Compile Include="Areas\admin\Controllers\usersController.cs" />
<Compile Include="Code\LongIdGenerator.cs" />
<Compile Include="Code\MvcIntrinsics.cs" /> <Compile Include="Code\MvcIntrinsics.cs" />
<Compile Include="Controllers\apiController.cs" /> <Compile Include="Controllers\apiController.cs" />
<Compile Include="Controllers\frontController.cs" /> <Compile Include="Controllers\frontController.cs" />

View File

@ -1,42 +0,0 @@
using System;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Bson.Serialization;
namespace BuildFeed.Code
{
public class LongIdGenerator : IIdGenerator
{
private const string _idCollectionName = "IDs";
private MongoClient _dbClient;
private IMongoCollection<long> _idCollection;
public LongIdGenerator()
{
_dbClient = new MongoClient(new MongoClientSettings()
{
Server = new MongoServerAddress(MongoConfig.Host, MongoConfig.Port)
});
_idCollection = _dbClient.GetDatabase(MongoConfig.Database).GetCollection<long>(_idCollectionName);
}
public object GenerateId(object container, object document)
{
var query = Query.EQ("_id", (container).Name);
return (_idCollection.FindOneAndUpdateAsync(new FindAndModifyArgs()
{
Query = query,
Update = CreateUpdateBuilder(),
VersionReturned = FindAndModifyDocumentVersion.Modified,
Upsert = true
}).AsInt64.ModifiedDocument["seq"]);
}
public bool IsEmpty(object id)
{
return ((long)id) == 0;
}
}
}

View File

@ -10,16 +10,17 @@ namespace BuildFeed.Controllers
{ {
public class apiController : ApiController public class apiController : ApiController
{ {
public IEnumerable<Build> GetBuilds() public IEnumerable<BuildModel> GetBuilds()
{ {
return Build.SelectInBuildOrder(); return new Build().SelectInBuildOrder();
} }
public IEnumerable<string> GetWin10Labs() public IEnumerable<string> GetWin10Labs()
{ {
Build b = new Build();
List<string> labs = new List<string>(); List<string> labs = new List<string>();
labs.AddRange(Build.SelectBuildLabs(6, 4)); labs.AddRange(b.SelectBuildLabs(6, 4));
labs.AddRange(Build.SelectBuildLabs(10, 0)); labs.AddRange(b.SelectBuildLabs(10, 0));
return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray(); return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray();
} }
@ -33,7 +34,7 @@ public bool AddWin10Builds(NewBuild apiModel)
} }
if (Membership.ValidateUser(apiModel.Username, apiModel.Password)) if (Membership.ValidateUser(apiModel.Username, apiModel.Password))
{ {
Build.InsertAll(apiModel.NewBuilds.Select(nb => new Build() new Build().InsertAll(apiModel.NewBuilds.Select(nb => new BuildModel()
{ {
MajorVersion = nb.MajorVersion, MajorVersion = nb.MajorVersion,
MinorVersion = nb.MinorVersion, MinorVersion = nb.MinorVersion,
@ -74,7 +75,7 @@ orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) asce
results.AddRange(sourceResults); results.AddRange(sourceResults);
var versionResults = from v in Build.SelectBuildVersions() var versionResults = from v in new Build().SelectBuildVersions()
where $"{v.Major}.{v.Minor}".StartsWith(query) where $"{v.Major}.{v.Minor}".StartsWith(query)
orderby v.Major descending, v.Minor descending orderby v.Major descending, v.Minor descending
select new SearchResult() select new SearchResult()
@ -88,7 +89,7 @@ orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) asce
results.AddRange(versionResults); results.AddRange(versionResults);
var yearResults = from y in Build.SelectBuildYears() var yearResults = from y in new Build().SelectBuildYears()
where y.ToString().Contains(query) where y.ToString().Contains(query)
orderby y descending orderby y descending
select new SearchResult() select new SearchResult()
@ -102,7 +103,7 @@ orderby y descending
results.AddRange(yearResults); results.AddRange(yearResults);
var labResults = from l in Build.SelectBuildLabs() var labResults = from l in new Build().SelectBuildLabs()
where l.ToLower().Contains(query.ToLower()) where l.ToLower().Contains(query.ToLower())
orderby l.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending orderby l.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending
select new SearchResult() select new SearchResult()
@ -116,7 +117,7 @@ orderby l.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending
results.AddRange(labResults); results.AddRange(labResults);
var buildResults = from b in Build.Select() var buildResults = from b in new Build().Select()
where b.FullBuildString.ToLower().Contains(query.ToLower()) where b.FullBuildString.ToLower().Contains(query.ToLower())
orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending, orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending,
b.BuildTime descending b.BuildTime descending

View File

@ -27,7 +27,7 @@ public class frontController : Controller
#endif #endif
public ActionResult indexPage(int page) public ActionResult indexPage(int page)
{ {
var buildGroups = (from b in Build.Select() var buildGroups = (from b in new Build().Select()
group b by new BuildGroup group b by new BuildGroup
{ {
Major = b.MajorVersion, Major = b.MajorVersion,
@ -64,7 +64,7 @@ bg.Key.Revision descending
#endif #endif
public ActionResult viewGroup(byte major, byte minor, ushort number, ushort? revision = null) public ActionResult viewGroup(byte major, byte minor, ushort number, ushort? revision = null)
{ {
var builds = (from b in Build.Select() var builds = (from b in new Build().Select()
group b by new BuildGroup group b by new BuildGroup
{ {
Major = b.MajorVersion, Major = b.MajorVersion,
@ -88,9 +88,9 @@ into bg
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif #endif
public ActionResult viewBuild(long id) public ActionResult viewBuild(Guid id)
{ {
Build b = Build.SelectById(id); BuildModel b = new Build().SelectById(id);
return View(b); return View(b);
} }
@ -99,9 +99,9 @@ public ActionResult viewBuild(long id)
[OutputCache(Duration = 600, VaryByParam = "none")] [OutputCache(Duration = 600, VaryByParam = "none")]
[CustomContentType(ContentType = "image/png", Order = 2)] [CustomContentType(ContentType = "image/png", Order = 2)]
#endif #endif
public ActionResult twitterCard(long id) public ActionResult twitterCard(Guid id)
{ {
Build b = Build.SelectById(id); BuildModel b = new Build().SelectById(id);
using (Bitmap bm = new Bitmap(560, 300)) using (Bitmap bm = new Bitmap(560, 300))
{ {
@ -142,14 +142,14 @@ public ActionResult twitterCard(long id)
#endif #endif
public ActionResult viewLabPage(string lab, int page) public ActionResult viewLabPage(string lab, int page)
{ {
ViewBag.MetaItem = MetaItem.SelectById(new MetaItemKey ViewBag.MetaItem = new MetaItem().SelectById(new MetaItemKey
{ {
Type = MetaType.Lab, Type = MetaType.Lab,
Value = lab Value = lab
}); });
ViewBag.ItemId = lab; ViewBag.ItemId = lab;
var builds = Build.SelectInBuildOrder().Where(b => b.Lab != null && (b.Lab.ToLower() == lab.ToLower())).ToArray(); var builds = new Build().SelectInBuildOrder().Where(b => b.Lab != null && (b.Lab.ToLower() == lab.ToLower())).ToArray();
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE));
@ -174,14 +174,14 @@ public ActionResult viewLabPage(string lab, int page)
#endif #endif
public ActionResult viewSourcePage(TypeOfSource source, int page) public ActionResult viewSourcePage(TypeOfSource source, int page)
{ {
ViewBag.MetaItem = MetaItem.SelectById(new MetaItemKey ViewBag.MetaItem = new MetaItem().SelectById(new MetaItemKey
{ {
Type = MetaType.Source, Type = MetaType.Source,
Value = source.ToString() Value = source.ToString()
}); });
ViewBag.ItemId = DisplayHelpers.GetDisplayTextForEnum(source); ViewBag.ItemId = DisplayHelpers.GetDisplayTextForEnum(source);
var builds = Build.SelectInBuildOrder().Where(b => b.SourceType == source).ToArray(); var builds = new Build().SelectInBuildOrder().Where(b => b.SourceType == source).ToArray();
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE));
@ -206,14 +206,14 @@ public ActionResult viewSourcePage(TypeOfSource source, int page)
#endif #endif
public ActionResult viewYearPage(int year, int page) public ActionResult viewYearPage(int year, int page)
{ {
ViewBag.MetaItem = MetaItem.SelectById(new MetaItemKey ViewBag.MetaItem = new MetaItem().SelectById(new MetaItemKey
{ {
Type = MetaType.Year, Type = MetaType.Year,
Value = year.ToString() Value = year.ToString()
}); });
ViewBag.ItemId = year.ToString(); ViewBag.ItemId = year.ToString();
var builds = Build.SelectInBuildOrder().Where(b => b.BuildTime.HasValue && b.BuildTime.Value.Year == year).ToArray(); var builds = new Build().SelectInBuildOrder().Where(b => b.BuildTime.HasValue && b.BuildTime.Value.Year == year).ToArray();
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE));
@ -239,14 +239,14 @@ public ActionResult viewYearPage(int year, int page)
public ActionResult viewVersionPage(int major, int minor, int page) public ActionResult viewVersionPage(int major, int minor, int page)
{ {
string valueString = $"{major}.{minor}"; string valueString = $"{major}.{minor}";
ViewBag.MetaItem = MetaItem.SelectById(new MetaItemKey ViewBag.MetaItem = new MetaItem().SelectById(new MetaItemKey
{ {
Type = MetaType.Version, Type = MetaType.Version,
Value = valueString Value = valueString
}); });
ViewBag.ItemId = valueString; ViewBag.ItemId = valueString;
var builds = Build.SelectInBuildOrder().Where(b => b.MajorVersion == major && b.MinorVersion == minor).ToArray(); var builds = new Build().SelectInBuildOrder().Where(b => b.MajorVersion == major && b.MinorVersion == minor).ToArray();
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(builds.Length) / Convert.ToDouble(PAGE_SIZE));
@ -263,7 +263,7 @@ public ActionResult viewVersionPage(int major, int minor, int page)
public ActionResult addBuild() { return View("editBuild"); } public ActionResult addBuild() { return View("editBuild"); }
[Route("add/"), Authorize, HttpPost] [Route("add/"), Authorize, HttpPost]
public ActionResult addBuild(Build build) public ActionResult addBuild(BuildModel build)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
@ -271,7 +271,7 @@ public ActionResult addBuild(Build build)
{ {
build.Added = DateTime.Now; build.Added = DateTime.Now;
build.Modified = DateTime.Now; build.Modified = DateTime.Now;
Build.Insert(build); new Build().Insert(build);
} }
catch catch
{ {
@ -286,20 +286,20 @@ public ActionResult addBuild(Build build)
} }
[Route("edit/{id}/"), Authorize] [Route("edit/{id}/"), Authorize]
public ActionResult editBuild(long id) public ActionResult editBuild(Guid id)
{ {
Build b = Build.SelectById(id); BuildModel b = new Build().SelectById(id);
return View(b); return View(b);
} }
[Route("edit/{id}/"), Authorize, HttpPost] [Route("edit/{id}/"), Authorize, HttpPost]
public ActionResult editBuild(long id, Build build) public ActionResult editBuild(long id, BuildModel build)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
try try
{ {
Build.Update(build); new Build().Update(build);
} }
catch catch
{ {
@ -312,9 +312,9 @@ public ActionResult editBuild(long id, Build build)
} }
[Route("delete/{id}/"), Authorize(Roles = "Administrators")] [Route("delete/{id}/"), Authorize(Roles = "Administrators")]
public ActionResult deleteBuild(long id) public ActionResult deleteBuild(Guid id)
{ {
Build.DeleteById(id); new Build().DeleteById(id);
return RedirectToAction("index"); return RedirectToAction("index");
} }
} }

View File

@ -15,7 +15,7 @@ public class rssController : Controller
[Route("rss/compiled")] [Route("rss/compiled")]
public async Task<ActionResult> index() public async Task<ActionResult> index()
{ {
var builds = Build.SelectInBuildOrder().Take(20); var builds = new Build().SelectInBuildOrder().Take(20);
RssDocument rdoc = new RssDocument() RssDocument rdoc = new RssDocument()
{ {
@ -48,7 +48,7 @@ public async Task<ActionResult> index()
[Route("rss/added")] [Route("rss/added")]
public async Task<ActionResult> added() public async Task<ActionResult> added()
{ {
var builds = Build.Select().OrderByDescending(b => b.Added).Take(20); var builds = new Build().Select().OrderByDescending(b => b.Added).Take(20);
RssDocument rdoc = new RssDocument() RssDocument rdoc = new RssDocument()
{ {
@ -83,7 +83,7 @@ public async Task<ActionResult> added()
[Route("rss/leaked")] [Route("rss/leaked")]
public async Task<ActionResult> leaked() public async Task<ActionResult> leaked()
{ {
var builds = Build.Select().Where(b => b.LeakDate.HasValue).OrderByDescending(b => b.LeakDate.Value).Take(20); var builds = new Build().Select().Where(b => b.LeakDate.HasValue).OrderByDescending(b => b.LeakDate.Value).Take(20);
RssDocument rdoc = new RssDocument() RssDocument rdoc = new RssDocument()
{ {
@ -118,7 +118,7 @@ public async Task<ActionResult> leaked()
[Route("rss/version")] [Route("rss/version")]
public async Task<ActionResult> version() public async Task<ActionResult> version()
{ {
var builds = Build.SelectInVersionOrder() var builds = new Build().SelectInVersionOrder()
.Take(20); .Take(20);
@ -154,7 +154,7 @@ public async Task<ActionResult> version()
[Route("rss/flight/{id}")] [Route("rss/flight/{id}")]
public async Task<ActionResult> flight(LevelOfFlight id) public async Task<ActionResult> flight(LevelOfFlight id)
{ {
var builds = Build.SelectInBuildOrder() var builds = new Build().SelectInBuildOrder()
.Where(b => b.FlightLevel == id) .Where(b => b.FlightLevel == id)
.Take(20); .Take(20);
@ -191,7 +191,7 @@ public async Task<ActionResult> flight(LevelOfFlight id)
[Route("rss/lab/{lab}")] [Route("rss/lab/{lab}")]
public async Task<ActionResult> lab(string lab) public async Task<ActionResult> lab(string lab)
{ {
var builds = Build.SelectInBuildOrder() var builds = new Build().SelectInBuildOrder()
.Where(b => b.Lab == lab) .Where(b => b.Lab == lab)
.Take(20); .Take(20);

View File

@ -128,7 +128,7 @@ public ActionResult thanks_register()
[Route("rss")] [Route("rss")]
public ActionResult rss() public ActionResult rss()
{ {
ViewBag.Labs = Build.SelectBuildLabs(); ViewBag.Labs = new Build().SelectBuildLabs();
return View(); return View();
} }
@ -138,7 +138,7 @@ public ActionResult rss()
#endif #endif
public ActionResult sitemap() public ActionResult sitemap()
{ {
var builds = Build.SelectInVersionOrder().ToArray(); var builds = new Build().SelectInVersionOrder();
Dictionary<string, SitemapPagedAction[]> actions = new Dictionary<string, SitemapPagedAction[]> Dictionary<string, SitemapPagedAction[]> actions = new Dictionary<string, SitemapPagedAction[]>
{ {
{ {
@ -152,7 +152,7 @@ public ActionResult sitemap()
action = "index", action = "index",
page = 1 page = 1
}), }),
Pages = (builds.Length + (frontController.PAGE_SIZE - 1)) / frontController.PAGE_SIZE Pages = (builds.Count() + (frontController.PAGE_SIZE - 1)) / frontController.PAGE_SIZE
} }
} }
}, },
@ -245,7 +245,7 @@ orderby bv.Key
SitemapData model = new SitemapData() SitemapData model = new SitemapData()
{ {
Builds = (from b in Build.Select() Builds = (from b in new Build().Select()
group b by new BuildGroup() group b by new BuildGroup()
{ {
Major = b.MajorVersion, Major = b.MajorVersion,
@ -292,7 +292,7 @@ public ActionResult xmlsitemap()
home.Add(new XElement(xn + "changefreq", "daily")); home.Add(new XElement(xn + "changefreq", "daily"));
xlist.Add(home); xlist.Add(home);
foreach (var b in Build.Select()) foreach (var b in new Build().Select())
{ {
XElement url = new XElement(xn + "url"); XElement url = new XElement(xn + "url");
url.Add(new XElement(xn + "loc", Request.Url.GetLeftPart(UriPartial.Authority) + Url.Action("viewBuild", "front", new { id = b.Id }))); url.Add(new XElement(xn + "loc", Request.Url.GetLeftPart(UriPartial.Authority) + Url.Action("viewBuild", "front", new { id = b.Id })));
@ -321,7 +321,7 @@ public ActionResult xmlsitemap()
#endif #endif
public ActionResult stats() public ActionResult stats()
{ {
var builds = Build.Select().ToArray(); var builds = new Build().Select().ToArray();
List<MonthCount> additions = new List<MonthCount>(); List<MonthCount> additions = new List<MonthCount>();
var rawAdditions = (from b in builds var rawAdditions = (from b in builds

View File

@ -18,7 +18,9 @@ namespace BuildFeed.Models
public class BuildModel public class BuildModel
{ {
[Key, BsonId] [Key, BsonId]
public long Id { get; set; } public Guid Id { get; set; }
public long? LegacyId { get; set; }
[@Required] [@Required]
[Display(ResourceType = typeof(Model), Name = "MajorVersion")] [Display(ResourceType = typeof(Model), Name = "MajorVersion")]
@ -139,13 +141,21 @@ public IEnumerable<BuildModel> Select()
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public BuildModel SelectById(long id) public BuildModel SelectById(Guid id)
{ {
var task = _buildCollection.Find(f => f.Id == id).SingleOrDefaultAsync(); var task = _buildCollection.Find(f => f.Id == id).SingleOrDefaultAsync();
task.Wait(); task.Wait();
return task.Result; return task.Result;
} }
[DataObjectMethod(DataObjectMethodType.Select, false)]
public BuildModel SelectByLegacyId(long id)
{
var task = _buildCollection.Find(f => f.LegacyId == id).SingleOrDefaultAsync();
task.Wait();
return task.Result;
}
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public IEnumerable<BuildModel> SelectInBuildOrder() public IEnumerable<BuildModel> SelectInBuildOrder()
{ {
@ -219,47 +229,34 @@ public IEnumerable<string> SelectBuildLabs(byte major, byte minor)
[DataObjectMethod(DataObjectMethodType.Insert, true)] [DataObjectMethod(DataObjectMethodType.Insert, true)]
public void Insert(BuildModel item) public void Insert(BuildModel item)
{ {
item.Id = item.Id = Guid.NewGuid();
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _buildCollection.InsertOneAsync(item);
{ task.Wait();
var client = rClient.As<Build>();
item.Id = client.GetNextSequence();
client.Store(item);
}
} }
[DataObjectMethod(DataObjectMethodType.Update, true)] [DataObjectMethod(DataObjectMethodType.Update, true)]
public static void Update(Build item) public void Update(BuildModel item)
{ {
Build old = SelectById(item.Id); BuildModel old = SelectById(item.Id);
item.Added = old.Added; item.Added = old.Added;
item.Modified = DateTime.Now; item.Modified = DateTime.Now;
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _buildCollection.ReplaceOneAsync(f => f.Id == item.Id, item);
{ task.Wait();
var client = rClient.As<Build>();
client.Store(item);
}
} }
[DataObjectMethod(DataObjectMethodType.Insert, false)] [DataObjectMethod(DataObjectMethodType.Insert, false)]
public static void InsertAll(IEnumerable<Build> items) public void InsertAll(IEnumerable<BuildModel> items)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _buildCollection.InsertManyAsync(items);
{ task.Wait();
var client = rClient.As<Build>();
client.StoreAll(items);
}
} }
[DataObjectMethod(DataObjectMethodType.Delete, true)] [DataObjectMethod(DataObjectMethodType.Delete, true)]
public static void DeleteById(long id) public void DeleteById(Guid id)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _buildCollection.DeleteOneAsync(f => f.Id == id);
{ task.Wait();
var client = rClient.As<Build>();
client.DeleteById(id);
}
} }
} }

View File

@ -1,6 +1,6 @@
using NServiceKit.DataAnnotations; using MongoDB.Bson;
using NServiceKit.DesignPatterns.Model; using MongoDB.Bson.Serialization.Attributes;
using NServiceKit.Redis; using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -12,10 +12,10 @@
namespace BuildFeed.Models namespace BuildFeed.Models
{ {
[DataObject] [DataObject]
public class MetaItem : IHasId<MetaItemKey> public class MetaItemModel
{ {
[Key] [Key]
[Index] [BsonId]
[@Required] [@Required]
public MetaItemKey Id { get; set; } public MetaItemKey Id { get; set; }
@ -25,136 +25,114 @@ public class MetaItem : IHasId<MetaItemKey>
[DisplayName("Meta Description")] [DisplayName("Meta Description")]
public string MetaDescription { get; set; } public string MetaDescription { get; set; }
}
public class MetaItem
{
private const string _metaCollectionName = "metaitem";
private MongoClient _dbClient;
private IMongoCollection<MetaItemModel> _metaCollection;
public MetaItem()
{
_dbClient = new MongoClient(new MongoClientSettings()
{
Server = new MongoServerAddress(MongoConfig.Host, MongoConfig.Port)
});
_metaCollection = _dbClient.GetDatabase(MongoConfig.Database).GetCollection<MetaItemModel>(_metaCollectionName);
}
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public static IEnumerable<MetaItem> Select() public IEnumerable<MetaItemModel> Select()
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.Find(new BsonDocument()).ToListAsync();
{ task.Wait();
var client = rClient.As<MetaItem>(); return task.Result;
return client.GetAll();
}
} }
[DataObjectMethod(DataObjectMethodType.Select, true)] [DataObjectMethod(DataObjectMethodType.Select, true)]
public static IEnumerable<MetaItem> SelectByType(MetaType type) public IEnumerable<MetaItemModel> SelectByType(MetaType type)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.Find(f => f.Id.Type == type).ToListAsync();
{ task.Wait();
var client = rClient.As<MetaItem>(); return task.Result;
return from t in client.GetAll()
where t.Id.Type == type
select t;
}
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public static MetaItem SelectById(MetaItemKey id) public MetaItemModel SelectById(MetaItemKey id)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.Find(f => f.Id.Type == id.Type && f.Id.Value == id.Value).SingleOrDefaultAsync();
{ task.Wait();
var client = rClient.As<MetaItem>(); return task.Result;
return client.GetById(id);
}
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public static IEnumerable<string> SelectUnusedLabs() public IEnumerable<string> SelectUnusedLabs()
{ {
var labs = new Build().SelectBuildLabs();
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var usedLabs = _metaCollection.Find(f => f.Id.Type == MetaType.Lab).ToListAsync();
{ usedLabs.Wait();
var client = rClient.As<MetaItem>();
var labs = Build.SelectBuildLabs();
var usedLabs = from u in client.GetAll() return from l in labs
where u.Id.Type == MetaType.Lab where usedLabs.Result.All(ul => ul.Id.Value != l)
select u; select l;
return from l in labs
where usedLabs.All(ul => ul.Id.Value != l)
select l;
}
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public static IEnumerable<string> SelectUnusedVersions() public IEnumerable<string> SelectUnusedVersions()
{ {
var versions = new Build().SelectBuildVersions();
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var usedVersions = _metaCollection.Find(f => f.Id.Type == MetaType.Version).ToListAsync();
{ usedVersions.Wait();
var client = rClient.As<MetaItem>();
var versions = Build.SelectBuildVersions();
var usedLabs = from u in client.GetAll() return from v in versions
where u.Id.Type == MetaType.Version where usedVersions.Result.All(ul => ul.Id.Value != v.ToString())
select u; select v.ToString();
return from v in versions
where usedLabs.All(ul => ul.Id.Value != v.ToString())
select v.ToString();
}
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public static IEnumerable<string> SelectUnusedYears() public IEnumerable<string> SelectUnusedYears()
{ {
var years = new Build().SelectBuildYears();
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var usedYears = _metaCollection.Find(f => f.Id.Type == MetaType.Year).ToListAsync();
{ usedYears.Wait();
var client = rClient.As<MetaItem>();
var years = Build.SelectBuildYears();
var usedYears = from u in client.GetAll() return from y in years
where u.Id.Type == MetaType.Year where usedYears.Result.All(ul => ul.Id.Value != y.ToString())
select u; select y.ToString();
return from y in years
where usedYears.All(ul => ul.Id.Value != y.ToString())
select y.ToString();
}
} }
[DataObjectMethod(DataObjectMethodType.Insert, true)] [DataObjectMethod(DataObjectMethodType.Insert, true)]
public static void Insert(MetaItem item) public void Insert(MetaItemModel item)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.InsertOneAsync(item);
{ task.Wait();
var client = rClient.As<MetaItem>();
client.Store(item);
}
} }
[DataObjectMethod(DataObjectMethodType.Update, true)] [DataObjectMethod(DataObjectMethodType.Update, true)]
public static void Update(MetaItem item) public void Update(MetaItemModel item)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.ReplaceOneAsync(f => f.Id.Type == item.Id.Type && f.Id.Value == item.Id.Value, item);
{ task.Wait();
var client = rClient.As<MetaItem>();
client.Store(item);
}
} }
[DataObjectMethod(DataObjectMethodType.Insert, false)] [DataObjectMethod(DataObjectMethodType.Insert, false)]
public static void InsertAll(IEnumerable<MetaItem> items) public void InsertAll(IEnumerable<MetaItemModel> items)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.InsertManyAsync(items);
{ task.Wait();
var client = rClient.As<MetaItem>();
client.StoreAll(items);
}
} }
[DataObjectMethod(DataObjectMethodType.Delete, true)] [DataObjectMethod(DataObjectMethodType.Delete, true)]
public static void DeleteById(long id) public void DeleteById(MetaItemKey id)
{ {
using (RedisClient rClient = new RedisClient(MongoConfig.Host, MongoConfig.Port, db: MongoConfig.Database)) var task = _metaCollection.DeleteOneAsync(f => f.Id.Type == id.Type && f.Id.Value == id.Value);
{ task.Wait();
var client = rClient.As<MetaItem>();
client.DeleteById(id);
}
} }
} }

View File

@ -22,7 +22,7 @@ public class SitemapDataBuildGroup
public class SitemapDataBuild public class SitemapDataBuild
{ {
public long Id { get; set; } public Guid Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
} }