public object Initialize(object newEntity)
        {
            PutInitializeBarrierDataRequest request = (PutInitializeBarrierDataRequest)newEntity;
            MEPatientBarrier mePb = null;

            try
            {
                mePb = new MEPatientBarrier(this.UserId)
                {
                    Id            = ObjectId.GenerateNewId(),
                    PatientGoalId = ObjectId.Parse(request.PatientGoalId),
                    TTLDate       = System.DateTime.UtcNow.AddDays(_initializeDays),
                    StatusDate    = DateTime.UtcNow,
                    DeleteFlag    = false
                                    //,
                                    //LastUpdatedOn = DateTime.UtcNow,
                                    //UpdatedBy = ObjectId.Parse(this.UserId),
                                    //Version = request.Version
                };

                using (PatientGoalMongoContext ctx = new PatientGoalMongoContext(_dbName))
                {
                    ctx.PatientBarriers.Collection.Insert(mePb);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientBarrier.ToString(),
                                             mePb.Id.ToString(),
                                             Common.DataAuditType.Insert,
                                             request.ContractNumber);
                }
                return(mePb.Id.ToString());
            }
            catch (Exception) { throw; }
        }
 public object FindByID(string entityID)
 {
     try
     {
         PatientBarrierData barrierData = null;
         List <IMongoQuery> queries     = new List <IMongoQuery>();
         queries.Add(Query.EQ(MEPatientBarrier.IdProperty, ObjectId.Parse(entityID)));
         queries.Add(Query.EQ(MEPatientBarrier.DeleteFlagProperty, false));
         queries.Add(Query.EQ(MEPatientBarrier.TTLDateProperty, BsonNull.Value));
         IMongoQuery mQuery = Query.And(queries);
         using (PatientGoalMongoContext ctx = new PatientGoalMongoContext(_dbName))
         {
             MEPatientBarrier b = ctx.PatientBarriers.Collection.Find(mQuery).FirstOrDefault();
             if (b != null)
             {
                 barrierData = new PatientBarrierData {
                     Id            = b.Id.ToString(),
                     Name          = b.Name,
                     PatientGoalId = b.PatientGoalId.ToString(),
                     CategoryId    = b.CategoryId == null ? null : b.CategoryId.ToString(),
                     StatusId      = ((int)b.Status),
                     StatusDate    = b.StatusDate,
                     DeleteFlag    = b.DeleteFlag,
                     Details       = b.Details
                 };
             }
         }
         return(barrierData);
     }
     catch (Exception) { throw; }
 }
        public object Update(object entity)
        {
            bool result = false;
            PutUpdateBarrierRequest pbr = (PutUpdateBarrierRequest)entity;
            PatientBarrierData      pb  = pbr.Barrier;

            try
            {
                using (PatientGoalMongoContext ctx = new PatientGoalMongoContext(_dbName))
                {
                    var q = MB.Query <MEPatientBarrier> .EQ(b => b.Id, ObjectId.Parse(pb.Id));

                    // Set the StatusDate to Now if the status is changed.
                    MEPatientBarrier existingPB = ctx.PatientBarriers.Collection.Find(q).SetFields(MEPatientBarrier.StatusProperty).FirstOrDefault();
                    if (existingPB != null)
                    {
                        if ((int)existingPB.Status != pb.StatusId)
                        {
                            pb.StatusDate = DateTime.UtcNow;
                        }
                    }

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientBarrier.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientBarrier.VersionProperty, pbr.Version));
                    uv.Add(MB.Update.Set(MEPatientBarrier.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    if (pb.Name != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.NameProperty, pb.Name));
                    }
                    if (pb.Details != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.DetailProperty, pb.Details));
                    }
                    if (pb.PatientGoalId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.PatientGoalIdProperty, ObjectId.Parse(pb.PatientGoalId)));
                    }
                    if (pb.StatusId != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.StatusProperty, pb.StatusId));
                    }
                    if (pb.StatusDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.StatusDateProperty, pb.StatusDate));
                    }
                    if (pb.CategoryId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.CategoryProperty, ObjectId.Parse(pb.CategoryId)));
                    }
                    uv.Add(MB.Update.Set(MEPatientBarrier.DeleteFlagProperty, pb.DeleteFlag));
                    DataAuditType type;
                    if (pb.DeleteFlag)
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.TTLDateProperty, System.DateTime.UtcNow.AddDays(_expireDays)));
                        type = Common.DataAuditType.Delete;
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientBarrier.TTLDateProperty, BsonNull.Value));
                        type = Common.DataAuditType.Update;
                    }
                    IMongoUpdate update = MB.Update.Combine(uv);

                    ctx.PatientBarriers.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(pbr.UserId,
                                             MongoCollectionName.PatientBarrier.ToString(),
                                             pb.Id.ToString(),
                                             type,
                                             pbr.ContractNumber);
                    result = true;
                }
                return(result as object);
            }
            catch (Exception ex) { throw new Exception("PatientGoalDD:MongoPatientBarrierRepository:Update()" + ex.Message, ex.InnerException); }
        }