/// <summary>
        /// دریافت آدرس اصلی از آدرس کوتاه
        /// </summary>
        /// <param name="shortAddress"></param>
        /// <param name="visitorIpAddress"></param>
        /// <returns></returns>
        public ServiceResult <string> GetFullAddressByShortLink(string shortAddress, string visitorIpAddress)
        {
            ///اقدام به اعتبار سنجی آدرس اصلی
            var shortAddressValidationResult = ShortAddressValidation(shortAddress);

            if (shortAddressValidationResult.IsFailure)
            {
                return(ServiceResult <string> .Fail(message : shortAddressValidationResult.Message));
            }

            ///اقدام به دریافت لینک به وسیله آدرس کوتاه
            Link link = linkQueryRepository.GetByShortAddress(shortAddress);

            if (link == null)
            {
                return(ServiceResult <string> .Fail("برای لینک کوتاه شده لینک کاملی یافت نشد"));
            }

            ///اقدام به ایجاد لینک‌ویزیت جدید در دیتابیس
            LinkVisit linkVisit = LinkVisitGenerator(link.Id, visitorIpAddress);
            var       result    = linkVisitCommandRepository.Add(linkVisit);

            if (!result)
            {
                return(ServiceResult <string> .Fail("خطا در ثبت آمار"));
            }

            ///ارسال نتیجه
            return(ServiceResult <string> .Ok(value : link.FullAddress.Value));
        }
        /// <summary>
        /// ایجاد کننده موجودیت جدید از کلاس لینک‌ویزیت
        /// </summary>
        /// <param name="linkId"></param>
        /// <param name="visitorIpAddress"></param>
        /// <returns></returns>
        private LinkVisit LinkVisitGenerator(Guid linkId, string visitorIpAddress)
        {
            Guid     linkVisitId   = Guid.NewGuid();
            DateTime visitDateTime = DateTime.Now;


            LinkVisit linkVisit = new LinkVisit(linkVisitId, LinkId.FromGuid(linkId), visitorIpAddress, visitDateTime);

            return(linkVisit);
        }
 public bool Add(LinkVisit linkVisit)
 {
     try
     {
         _dbContext.LinkVisit.Add(linkVisit);
         _dbContext.SaveChanges();
         return(true);
     }
     catch (Exception exception)
     {
         string message = exception.GetSqlStringError();
         _logger.LogError(exception: exception, message: message);
         return(false);
     }
 }