Skip to content

Instantly share code, notes, and snippets.

@DavidSSL
Created April 30, 2013 11:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DavidSSL/8b41b7f241070d65add5 to your computer and use it in GitHub Desktop.
Save DavidSSL/8b41b7f241070d65add5 to your computer and use it in GitHub Desktop.
using System;
using WickedDomainModels.Model;
namespace WickedDomainModels.Services
{
public class OfferAssignmentService
{
private readonly IMemberRepository _memberRepository;
private readonly IOfferTypeRepository _offerTypeRepository;
private readonly IOfferValueCalculator _offerValueCalculator;
private readonly IOfferRepository _offerRepository;
public OfferAssignmentService(
IMemberRepository memberRepository,
IOfferTypeRepository offerTypeRepository,
IOfferValueCalculator offerValueCalculator,
IOfferRepository offerRepository
)
{
_memberRepository = memberRepository;
_offerTypeRepository = offerTypeRepository;
_offerValueCalculator = offerValueCalculator;
_offerRepository = offerRepository;
}
public void AssignOffer(Guid memberId, Guid offerTypeId)
{
var member = _memberRepository.GetById(memberId);
var offerType = _offerTypeRepository.GetById(offerTypeId);
var value = _offerValueCalculator
.CalculateValue(member, offerType);
DateTime dateExpiring;
switch (offerType.ExpirationType)
{
case ExpirationType.Assignment:
dateExpiring = DateTime.Now.AddDays(offerType.DaysValid);
break;
case ExpirationType.Fixed:
if (offerType.BeginDate != null)
dateExpiring =
offerType.BeginDate.Value.AddDays(offerType.DaysValid);
else
throw new InvalidOperationException();
break;
default:
throw new ArgumentOutOfRangeException();
}
var offer = new Offer
{
MemberAssigned = member,
Type = offerType,
Value = value,
DateExpiring = dateExpiring
};
member.AssignedOffers.Add(offer);
member.NumberOfActiveOffers++;
_offerRepository.Save(offer);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment