internal void SaveUserActivity(UserActivity userActivity, List<CouponType> allCoupons)
{
if (userActivity == null)
{
log.Warn("[SaveUserActivity] tried to save user activity, but received NULL parameter.");
return;
};
try
{
var userProfile = GetUserProfile();
var userData = userProfile.GetUserData();
string userActivityType = userActivity.GetType().Name;
if (userData.UserActivityList == null)
{
userData.UserActivityList = new List<UserActivity>();
}
userActivity.Date = DateTime.UtcNow;
userData.TotalPoints += userActivity.Points;
userData.UserActivityList.Add(userActivity);
//Check if reached Medal
MedalRequirementsChecker medalChecker = medalChecker = factoryMedalChecker(); ;
if(medalChecker == null)
return;
log.InfoFormat("[SaveUserActivity] Spontaneous : user={0}, userActivity={1}.", userProfile.UserName, userActivity.ToString());
List<UserMedal> medalList = medalChecker.ObtainMedalBecauseOfActivity(userData, userActivity);
if (medalList.Count > 0)
{
if (userData.UserMedalsList == null) userData.UserMedalsList = new List<UserMedal>();
foreach (var medal in medalList)
{
CouponType tempCoupon = GetCoupon(userData, allCoupons, userActivity);
if (tempCoupon != null) // get coupon for new medal
{
medal.Coupon = tempCoupon;
}
else // if already have all coupons get last one
{
if (allCoupons != null && allCoupons.Count > 0)
{
medal.Coupon = allCoupons.LastOrDefault();
}
}
userData.UserMedalsList.Add(medal);
}
userData.MedalNotificationFlag = true;
}
userProfile.SetUserData(userData);
userProfile.Save();
}
catch (Exception ex)
{
log.ErrorFormat("[SaveUserActivity] error: Exception={0}.", ex.ToString());
}
}