public bool SendHttpUnitTestBanner(Guid accountId, Guid unitTestId, bool hasBanner) { var accountDbContext = Context.GetAccountDbContext(accountId); lock (BannerLock) { var repository = accountDbContext.GetUnitTestRepository(); var unitTest = repository.GetById(unitTestId); var limitChecker = AccountLimitsCheckerManager.GetCheckerForAccount(accountId); var hasBannerChanged = (unitTest.HttpRequestUnitTest.LastBannerCheck == null) || (unitTest.HttpRequestUnitTest.HasBanner != hasBanner); if (hasBannerChanged) { unitTest.HttpRequestUnitTest.HasBanner = hasBanner; } // В любом случае баннер проверяется не чаще 1 раза в день unitTest.HttpRequestUnitTest.LastBannerCheck = DateTime.Now; accountDbContext.SaveChanges(); if (hasBannerChanged) { limitChecker.RefreshHttpChecksNoBannerCount(); } // Если баннера нет, то надо проверить лимит if (!hasBanner) { var checkResult = limitChecker.CheckMaxHttpChecksNoBanner(accountDbContext); if (!checkResult.Success) { var disableData = new SetUnitTestDisableRequestData() { UnitTestId = unitTestId, Comment = "Проверка выключена из-за отсутствия бесплатного баннера", ToDate = null }; Disable(accountId, disableData); accountDbContext.SaveChanges(); limitChecker.RefreshHttpChecksNoBannerCount(); } return(checkResult.Success); } return(true); } }
public IBulbCacheReadObject Disable(Guid accountId, SetUnitTestDisableRequestData requestData) { var unitTestId = requestData.UnitTestId; var cache = new AccountCache(accountId); IUnitTestCacheReadObject unitTestRead = null; // изменим юнит-тест using (var unitTest = cache.UnitTests.Write(unitTestId.Value)) { unitTestRead = unitTest; unitTest.Enable = false; unitTest.DisableToDate = requestData.ToDate; unitTest.DisableComment = requestData.Comment; unitTest.BeginSave(); } // обновим колбаски return(UpdateEnableOrDisableStatusData(unitTestRead)); }