Spontaneous.WebApp.Services.UserProfileFacade.GetCoupon C# (CSharp) 메소드

GetCoupon() 개인적인 메소드

private GetCoupon ( SpontaneousUserModel userData, List couponsList, UserActivity userActivity ) : CouponType
userData Spontaneous.DataModel.SpontaneousUserModel
couponsList List
userActivity Spontaneous.DataModel.UserActivity
리턴 Spontaneous.DataModel.CouponType
        internal CouponType GetCoupon(SpontaneousUserModel userData, List<CouponType> couponsList, UserActivity userActivity)
        {
            if (userData == null)
            {
                log.WarnFormat("[GetCoupon] User={0} tried to get coupon, but userData is null.", userData.id);
                return null;
            }
            Location location = (userActivity.ActivityLocation != null || userActivity.ActivityLocation.Latitude == 0 || userActivity.ActivityLocation.Longitude == 0)
                ? userActivity.ActivityLocation : new Location(32.067141, 34.804314);

            CouponType returnValue = null;

            if (couponsList != null && couponsList.Count > 0)
            {
                List<UserMedal> medalListCouponNotNull = userData.UserMedalsList.FindAll(x => x.Coupon != null);

                if (medalListCouponNotNull.Count == 0)
                {
                    returnValue = FindNearestCoupon(couponsList, location);
                }
                else
                {
                    //List<CouponType> tempList = new List<CouponType>(couponsList)
                    List<CouponType> tempList = couponsList;
                    foreach (var medal in medalListCouponNotNull)
                    {
                        tempList.RemoveAll(c => c.Id == medal.Coupon.Id);
                    }
                    if (tempList.Count == 0)
                    {
                        returnValue = couponsList.LastOrDefault();
                    }
                    else
                    {
                        returnValue = FindNearestCoupon(tempList, location);
                    }
                    if (returnValue == null)
                    {
                        log.WarnFormat("[GetCoupon] user={0}, Tried to get Coupon, but return value is Null.", userData.id, returnValue.ToString());
                        return null;
                    }
                }
                log.InfoFormat("[GetCoupon] user={0}, returnCoupon={1}.", userData.id, returnValue.ToString());
                return returnValue;
            }

            log.WarnFormat("[GetCoupon] user={0}, tried to get coupon, but no coupons in DB", userData.id);
            return null;
        }