From 5e06f5a8a082929a385fb3ba39dde859b44068ea Mon Sep 17 00:00:00 2001 From: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com> Date: Mon, 9 Jan 2023 14:16:16 +0100 Subject: [PATCH] V12: Change nullability for the log searches (#13647) * Changing nullability * Obsolete DeleteSavedSearch since the query param is not used * Fix a bit more referenced * Add default implementation for the new overload of DeleteSavedSearch --- src/Umbraco.Core/Models/ILogViewerQuery.cs | 4 ++-- src/Umbraco.Core/Models/LogViewerQuery.cs | 16 ++++++++-------- .../Logging/Viewer/ILogViewer.cs | 7 +++++-- .../Logging/Viewer/ILogViewerConfig.cs | 7 +++++-- .../Logging/Viewer/LogViewerConfig.cs | 10 +++++++--- .../Logging/Viewer/SavedLogSearch.cs | 4 ++-- .../Logging/Viewer/SerilogLogViewerSourceBase.cs | 10 +++++++--- .../Persistence/Dtos/LogViewerQueryDto.cs | 4 ++-- .../Controllers/LogViewerController.cs | 2 +- .../Logging/LogviewerTests.cs | 2 +- 10 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/Umbraco.Core/Models/ILogViewerQuery.cs b/src/Umbraco.Core/Models/ILogViewerQuery.cs index 372fddc3d0..61798b1ca3 100644 --- a/src/Umbraco.Core/Models/ILogViewerQuery.cs +++ b/src/Umbraco.Core/Models/ILogViewerQuery.cs @@ -4,7 +4,7 @@ namespace Umbraco.Cms.Core.Models; public interface ILogViewerQuery : IEntity { - string? Name { get; set; } + string Name { get; set; } - string? Query { get; set; } + string Query { get; set; } } diff --git a/src/Umbraco.Core/Models/LogViewerQuery.cs b/src/Umbraco.Core/Models/LogViewerQuery.cs index 5941763e24..ec0a2af4b7 100644 --- a/src/Umbraco.Core/Models/LogViewerQuery.cs +++ b/src/Umbraco.Core/Models/LogViewerQuery.cs @@ -7,26 +7,26 @@ namespace Umbraco.Cms.Core.Models; [DataContract(IsReference = true)] public class LogViewerQuery : EntityBase, ILogViewerQuery { - private string? _name; - private string? _query; + private string _name = string.Empty; + private string _query = string.Empty; - public LogViewerQuery(string? name, string? query) + public LogViewerQuery(string name, string query) { Name = name; - _query = query; + Query = query; } [DataMember] - public string? Name + public string Name { get => _name; - set => SetPropertyValueAndDetectChanges(value, ref _name, nameof(Name)); + set => SetPropertyValueAndDetectChanges(value, ref _name!, nameof(Name)); } [DataMember] - public string? Query + public string Query { get => _query; - set => SetPropertyValueAndDetectChanges(value, ref _query, nameof(Query)); + set => SetPropertyValueAndDetectChanges(value, ref _query!, nameof(Query)); } } diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewer.cs b/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewer.cs index e16f06b231..711906043a 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewer.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewer.cs @@ -14,12 +14,15 @@ public interface ILogViewer /// /// Adds a new saved search to chosen data source and returns the updated searches /// - IReadOnlyList AddSavedSearch(string? name, string? query); + IReadOnlyList AddSavedSearch(string name, string query); /// /// Deletes a saved search to chosen data source and returns the remaining searches /// - IReadOnlyList DeleteSavedSearch(string? name, string? query); + IReadOnlyList DeleteSavedSearch(string name) => DeleteSavedSearch(name, string.Empty); + + [Obsolete("Use the overload that only takes a 'name' parameter instead. This will be removed in Umbraco 14.")] + IReadOnlyList DeleteSavedSearch(string name, string query); /// /// A count of number of errors diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewerConfig.cs b/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewerConfig.cs index a6b98291c9..ed67c58b5d 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewerConfig.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/ILogViewerConfig.cs @@ -4,7 +4,10 @@ public interface ILogViewerConfig { IReadOnlyList GetSavedSearches(); - IReadOnlyList AddSavedSearch(string? name, string? query); + IReadOnlyList AddSavedSearch(string name, string query); - IReadOnlyList DeleteSavedSearch(string? name, string? query); + [Obsolete("Use the overload that only takes a 'name' parameter instead. This will be removed in Umbraco 14.")] + IReadOnlyList DeleteSavedSearch(string name, string query); + + IReadOnlyList DeleteSavedSearch(string name) => DeleteSavedSearch(name, string.Empty); } diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs index 15f7f8996c..ecd9aaf329 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs @@ -24,7 +24,7 @@ public class LogViewerConfig : ILogViewerConfig return result; } - public IReadOnlyList AddSavedSearch(string? name, string? query) + public IReadOnlyList AddSavedSearch(string name, string query) { using IScope scope = _scopeProvider.CreateScope(autoComplete: true); _logViewerQueryRepository.Save(new LogViewerQuery(name, query)); @@ -32,10 +32,14 @@ public class LogViewerConfig : ILogViewerConfig return GetSavedSearches(); } - public IReadOnlyList DeleteSavedSearch(string? name, string? query) + [Obsolete("Use the overload that only takes a 'name' parameter instead. This will be removed in Umbraco 14.")] + public IReadOnlyList DeleteSavedSearch(string name, string query) => DeleteSavedSearch(name); + + public IReadOnlyList DeleteSavedSearch(string name) { using IScope scope = _scopeProvider.CreateScope(autoComplete: true); - ILogViewerQuery? item = name is null ? null : _logViewerQueryRepository.GetByName(name); + ILogViewerQuery? item = _logViewerQueryRepository.GetByName(name); + if (item is not null) { _logViewerQueryRepository.Delete(item); diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/SavedLogSearch.cs b/src/Umbraco.Infrastructure/Logging/Viewer/SavedLogSearch.cs index 320f121890..5393bcd54d 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/SavedLogSearch.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/SavedLogSearch.cs @@ -5,8 +5,8 @@ namespace Umbraco.Cms.Core.Logging.Viewer; public class SavedLogSearch { [JsonProperty("name")] - public string? Name { get; set; } + public required string Name { get; set; } [JsonProperty("query")] - public string? Query { get; set; } + public required string Query { get; set; } } diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/SerilogLogViewerSourceBase.cs b/src/Umbraco.Infrastructure/Logging/Viewer/SerilogLogViewerSourceBase.cs index c41d384640..e83597d216 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/SerilogLogViewerSourceBase.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/SerilogLogViewerSourceBase.cs @@ -24,11 +24,15 @@ public abstract class SerilogLogViewerSourceBase : ILogViewer public virtual IReadOnlyList GetSavedSearches() => _logViewerConfig.GetSavedSearches(); - public virtual IReadOnlyList AddSavedSearch(string? name, string? query) + public virtual IReadOnlyList AddSavedSearch(string name, string query) => _logViewerConfig.AddSavedSearch(name, query); - public virtual IReadOnlyList DeleteSavedSearch(string? name, string? query) - => _logViewerConfig.DeleteSavedSearch(name, query); + [Obsolete("Use the overload that only takes a 'name' parameter instead. This will be removed in Umbraco 14.")] + public virtual IReadOnlyList DeleteSavedSearch(string name, string query) + => DeleteSavedSearch(name); + + public virtual IReadOnlyList DeleteSavedSearch(string name) + => _logViewerConfig.DeleteSavedSearch(name); public int GetNumberOfErrors(LogTimePeriod logTimePeriod) { diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs index a39c4ef756..6de89b1c64 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs @@ -15,8 +15,8 @@ internal class LogViewerQueryDto [Column("name")] [Index(IndexTypes.UniqueNonClustered, Name = "IX_LogViewerQuery_name")] - public string? Name { get; set; } + public required string Name { get; set; } [Column("query")] - public string? Query { get; set; } + public required string Query { get; set; } } diff --git a/src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs b/src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs index ed3994e6df..74615e1fa8 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs @@ -137,7 +137,7 @@ public class LogViewerController : BackOfficeNotificationsController [HttpPost] public IEnumerable DeleteSavedSearch(SavedLogSearch item) => - _logViewer.DeleteSavedSearch(item.Name, item.Query); + _logViewer.DeleteSavedSearch(item.Name); [HttpGet] public ReadOnlyDictionary GetLogLevels() => _logLevelLoader.GetLogLevelsFromSinks(); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs index 45c8929628..d8760c2e1e 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs @@ -223,7 +223,7 @@ public class LogviewerTests // Assert.That(searches, Contains.Item(savedSearch)); // Remove the search from above & ensure it no longer exists - _logViewer.DeleteSavedSearch("Unit Test Example", "Has(UnitTest)"); + _logViewer.DeleteSavedSearch("Unit Test Example"); searches = _logViewer.GetSavedSearches(); findItem = searches.Where(x => x.Name == "Unit Test Example" && x.Query == "Has(UnitTest)");