BuildFeed/Models/MetaItem.cs

122 lines
3.9 KiB
C#
Raw Normal View History

using NServiceKit.DataAnnotations;
2014-12-16 22:43:26 +08:00
using NServiceKit.DesignPatterns.Model;
using NServiceKit.Redis;
2014-12-16 22:43:26 +08:00
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
using Required = System.ComponentModel.DataAnnotations.RequiredAttribute;
namespace BuildFeed.Models
{
[DataObject]
public class MetaItem : IHasId<MetaItemKey>
2014-12-16 22:43:26 +08:00
{
[Key]
[Index]
[@Required]
public MetaItemKey Id { get; set; }
2014-12-16 22:43:26 +08:00
[DisplayName("Page Content")]
[AllowHtml]
public string PageContent { get; set; }
[DisplayName("Meta Description")]
public string MetaDescription { get; set; }
[DataObjectMethod(DataObjectMethodType.Select, true)]
public static IEnumerable<MetaItem> Select()
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
return client.GetAll();
}
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public static MetaItem SelectById(MetaItemKey id)
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
return client.GetById(id);
}
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public static IEnumerable<string> SelectUnusedLabs()
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
var labs = Build.SelectBuildLabs();
var usedLabs = from u in client.GetAll()
where u.Id.Type == MetaType.Lab
select u;
return from l in labs
where !usedLabs.Any(ul => ul.Id.Value as string == l)
select l;
}
}
[DataObjectMethod(DataObjectMethodType.Insert, true)]
public static void Insert(MetaItem item)
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
client.Store(item);
}
}
[DataObjectMethod(DataObjectMethodType.Update, true)]
public static void Update(MetaItem item)
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
client.Store(item);
}
}
[DataObjectMethod(DataObjectMethodType.Insert, false)]
public static void InsertAll(IEnumerable<MetaItem> items)
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
client.StoreAll(items);
}
}
[DataObjectMethod(DataObjectMethodType.Delete, true)]
public static void DeleteById(long id)
{
using (RedisClient rClient = new RedisClient(DatabaseConfig.Host, DatabaseConfig.Port, db: DatabaseConfig.Database))
{
var client = rClient.As<MetaItem>();
client.DeleteById(id);
}
}
2014-12-16 22:43:26 +08:00
}
public struct MetaItemKey
{
public object Value { get; set; }
public MetaType Type { get; set; }
}
public enum MetaType
{
Lab,
Version,
Source
}
2014-12-16 22:43:26 +08:00
}