package org.dicadeveloper.weplantaforest.code; import org.dicadeveloper.weplantaforest.common.errorHandling.ErrorCodes; import org.dicadeveloper.weplantaforest.common.errorHandling.IpatException; import org.dicadeveloper.weplantaforest.common.errorHandling.IpatPreconditions; import org.dicadeveloper.weplantaforest.event.EventService; import org.dicadeveloper.weplantaforest.gift.GiftService; import org.dicadeveloper.weplantaforest.user.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.NonNull; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired) ) public class CodeService { private @NonNull CodeRepository _codeRepository; private @NonNull GiftService _giftService; private @NonNull EventService _eventService; private @NonNull CodeGenerator _codeGenerator; public void redeemCode(User recipient, String codeString) throws IpatException{ IpatPreconditions.checkArgument(_codeGenerator.isValid(codeString), ErrorCodes.INVALID_CODE); Code code = _codeRepository.findByCode(codeString); boolean IsGiftOrEventCode = (code.isGiftCode() || code.isEventCode()); IpatPreconditions.checkArgument(IsGiftOrEventCode, ErrorCodes.CODE_IS_NEITHER_GIFT_NOR_EVENT); if(code.isGiftCode()){ _giftService.redeemGiftCode(recipient, codeString); }else if(code.isEventCode()){ _eventService.redeemEventCode(recipient, codeString); } } }