public ActionResult Claim(RewardClaimDTO dto) { if (!ModelState.IsValid) { return(View()); } var rao = new RewardClaimRAO { GroupId = dto.GroupId, RewardId = dto.RewardId, ClaimedCount = dto.ClaimedCount, RewardCost = dto.RewardCost }; var svc = CreateRewardService(); if (svc.ClaimReward(rao)) { return(RedirectToAction("Index", "Group", new { id = dto.GroupId })); } return(RedirectToAction("Index", "Group", new { id = dto.GroupId })); }
public bool ClaimReward(RewardClaimRAO rao) { using (var ctx = new ApplicationDbContext()) { var groupMember = ctx.GroupMembers.Single(gm => gm.MemberId == _userId && gm.GroupId == rao.GroupId); var reward = ctx.Rewards.Single(r => r.RewardId == rao.RewardId); if (groupMember.EarnedPoints < (reward.Cost * rao.ClaimedCount)) { return(false); } var entity = new ClaimedRewardEntity { OwnerId = groupMember.MemberId, RewardId = reward.RewardId, ClaimedCount = rao.ClaimedCount }; ctx.ClaimedRewards.Add(entity); return(ctx.SaveChanges() == 1); } }