private Reward GenerateAReward(IUser user, Random rand) { var now = DateTime.UtcNow.Date; var date = RandomDate(rand, now.AddDays(0 - _config.DaysHistory), now); var possibleComments = _config.RewardsConfig.PotentialComments; var toSkip = rand.Next(0, _possibleAttributes.Count() ); var toTake = rand.Next(1, _possibleAttributes.Count()); var reward = new Reward() { Id = IlluminateDatabase.GenerateId<Reward>(), Attributes = _possibleAttributes.Skip(toSkip).Take(toTake).ToList(), ConsolidatedCompletionDate = date, Date = date, Message =FormatComment( possibleComments.ElementAt(rand.Next(0,possibleComments.Count()-1)),user), SubjectUser = user.ToSimpleUser(), RewardGiver = _config.Users.Where(u=>u.Id!=user.Id).ElementAt(rand.Next(0,_config.Users.Count()-1)).ToSimpleUser(), Points = rand.Next(_config.RewardsConfig.MinPoints,_config.RewardsConfig.MaxPoints) }; return reward; }
public static List<TimelineItem> Create(string message, int points, string subjectUserId, string giverId, string attributeIds, IDocumentStore store) { using (var session = store.OpenSession()) { var giver = session.Load<User>(giverId); var attributes = new List<Attribute>(); if (!string.IsNullOrEmpty(attributeIds)) { //we can have multiple attributes so separate them out and ensure we discard copies attributes = session.Load<Attribute>(attributeIds.Split(',').Distinct()).ToList(); } var target = session.Load<User>(subjectUserId); var reward = new Reward { Id = IlluminateDatabase.GenerateId<Reward>(), Message = message, Points = points, Date = DateTime.UtcNow, RewardGiver = giver.ToSimpleUser(), SubjectUser = target.ToSimpleUser(), Attributes = attributes }; session.Store(reward); giver.RewardPointsLeft = giver.RewardPointsLeft - points; session.Store(giver); session.SaveChanges(); CreateRewardNotification(reward, session); return reward.ToTimelineItems(); } }
public static void CreateRewardsForUser(int number,SimpleUser user,IDocumentStore store, int pointsPer,SimpleUser rewardGiver,List<Attribute> attributes) { using (var session = store.OpenSession()) { for (var i = 0; i < number; i++) { var reward = new Reward { Id = IlluminateDatabase.GenerateId<Reward>(), Message = "test message", Points = pointsPer, Date = DateTime.Now, SubjectUser = user, RewardGiver = rewardGiver, Attributes = attributes }; session.Store(reward); session.SaveChanges(); } } }
private static void CreateRewardNotification(Reward reward, IDocumentSession session) { //also send the target an email letting them know var notify = new Notification { Body = Email.GetRewardEmailBody(reward.SubjectUser, reward.RewardGiver, reward.Message, reward.Points), SendDate = DateTime.UtcNow, Title = string.Format("Congratulations you have got a reward"), From = EmailRecipient.GetIlluminateRecipient(), NotificationRecipients = new[] { new NotificationRecipient { NotificationDeliveryTypes = NotificationDeliveryTypes .Email , Users = new List<SimpleUser>{reward.SubjectUser} } }, }; session.Store(notify); session.SaveChanges(); }