MongoServices 0.2.0
A Service/Repository Framework for mongoDB
|
00001 using System; 00002 using System.Collections.Generic; 00003 using System.Linq; 00004 using System.Text; 00005 using MongoDB.Bson; 00006 using System.ComponentModel.DataAnnotations; 00007 00008 namespace MongoServices 00009 { 00014 public abstract class ReadWriteService<T> : ReadOnlyService<T>, IReadWriteService<T> 00015 where T : MongoServicesModel 00016 { 00017 #region Protected Properties 00018 00019 00020 00021 protected IReadWriteRepository<T> ReadWriteRepository { get; private set; } 00022 #endregion 00023 00024 #region Public Constructors 00025 00026 00027 00028 00029 public ReadWriteService(IReadWriteRepository<T> readWriteRepository) 00030 : base(readWriteRepository) 00031 { 00032 ReadWriteRepository = readWriteRepository; 00033 } 00034 #endregion 00035 00036 #region Private Methods 00037 private bool ProcessBeforeSaveProcesses(T model) 00038 { 00039 var allProcessed = true; 00040 00041 if (ServiceConfig.BeforeSaveProcesses.Any(p => p(model) == false)) 00042 { 00043 allProcessed = false; 00044 } 00045 00046 return allProcessed; 00047 } 00048 00049 private void ProcessAfterSaveProcesses(T model) 00050 { 00051 ServiceConfig.AfterSaveProcesses.ForEach(a => a(model)); 00052 } 00053 00054 private bool Validate(T model) 00055 { 00056 var results = new List<ValidationResult>(); 00057 Validator.TryValidateObject(model, new ValidationContext(model, null, null), results, true); 00058 return results.Count == 0; 00059 } 00060 #endregion 00061 00062 #region Public Methods 00063 00064 00065 00066 00067 00068 public SaveResult Save(T model) 00069 { 00070 if (!ProcessBeforeSaveProcesses(model)) 00071 return SaveResult.BeforeSaveFailure; 00072 00073 if (!Validate(model)) 00074 return SaveResult.ValidationFailure; 00075 00076 ReadWriteRepository.Save(model); 00077 00078 ProcessAfterSaveProcesses(model); 00079 00080 return SaveResult.Saved; 00081 } 00082 00088 public IDictionary<MongoServicesModel, SaveResult> Save(IEnumerable<T> models) 00089 { 00090 var results = new Dictionary<MongoServicesModel, SaveResult>(); 00091 00092 foreach (var model in models) 00093 { 00094 results.Add(model, Save(model)); 00095 } 00096 00097 return results; 00098 } 00099 00104 public void DeleteById(ObjectId id) 00105 { 00106 ReadWriteRepository.DeleteById(id); 00107 } 00108 #endregion 00109 00110 #region Static Methods 00111 00112 00113 00114 00115 public static void AddBeforeSaveProcess(Func<T, bool> process) 00116 { 00117 ServiceConfig.BeforeSaveProcesses.Add(process); 00118 } 00119 00123 public static void ClearBeforeSaveProcesses() 00124 { 00125 ServiceConfig.BeforeSaveProcesses.Clear(); 00126 } 00127 00132 public static void AddAfterSaveProcess(Action<T> process) 00133 { 00134 ServiceConfig.AfterSaveProcesses.Add(process); 00135 } 00136 00140 public static void ClearAfterSaveProcesses() 00141 { 00142 ServiceConfig.AfterSaveProcesses.Clear(); 00143 } 00144 #endregion 00145 } 00146 }