From 6706b4b898caf70204bdd24cad2034ef5b702deb Mon Sep 17 00:00:00 2001 From: Konstantin Savosteev Date: Mon, 22 Apr 2024 15:44:12 +0200 Subject: [PATCH] VCST-830: change pushMessages to connection (#2) Co-authored-by: artem-dudarev --- .../PushMessageRecipientSearchService.cs | 5 ++- .../MarkAllPushMessagesReadCommandHandler.cs | 1 + ...MarkAllPushMessagesUnreadCommandHandler.cs | 1 + .../MarkPushMessageReadCommandHandler.cs | 1 + .../MarkPushMessageUnreadCommandHandler.cs | 1 + .../Models/ExpPushMessage.cs | 2 + .../Models/ExpPushMessagesResponse.cs | 7 +--- .../Queries/GetPushMessagesQuery.cs | 13 ++++++- .../Queries/GetPushMessagesQueryBuilder.cs | 3 +- .../Queries/GetPushMessagesQueryHandler.cs | 39 ++++++++++--------- .../Schemas/PushMessageType.cs | 1 + .../Schemas/PushMessagesResponseType.cs | 14 ------- 12 files changed, 45 insertions(+), 43 deletions(-) delete mode 100644 src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessagesResponseType.cs diff --git a/src/VirtoCommerce.PushMessages.Data/Services/PushMessageRecipientSearchService.cs b/src/VirtoCommerce.PushMessages.Data/Services/PushMessageRecipientSearchService.cs index 5af51e9..d3384fc 100644 --- a/src/VirtoCommerce.PushMessages.Data/Services/PushMessageRecipientSearchService.cs +++ b/src/VirtoCommerce.PushMessages.Data/Services/PushMessageRecipientSearchService.cs @@ -53,7 +53,8 @@ protected override IQueryable BuildQuery(IRepository query = query.Where(x => x.MemberName.Contains(criteria.Keyword) || x.UserName.Contains(criteria.Keyword) || x.MemberId.Contains(criteria.Keyword) || - x.UserId.Contains(criteria.Keyword)); + x.UserId.Contains(criteria.Keyword) || + x.Message.ShortMessage.Contains(criteria.Keyword)); } return query; @@ -67,7 +68,7 @@ protected override IList BuildSortExpression(PushMessageRecipientSearc { sortInfos = [ - new SortInfo { SortColumn = nameof(PushMessageEntity.CreatedDate), SortDirection = SortDirection.Descending}, + new SortInfo { SortColumn = nameof(PushMessageEntity.CreatedDate), SortDirection = SortDirection.Descending }, new SortInfo { SortColumn = nameof(PushMessageRecipientEntity.Id) }, ]; } diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesReadCommandHandler.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesReadCommandHandler.cs index 5480207..ef286ce 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesReadCommandHandler.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesReadCommandHandler.cs @@ -50,6 +50,7 @@ private static PushMessageRecipientSearchCriteria GetSearchCriteria(MarkAllPushM var criteria = AbstractTypeFactory.TryCreateInstance(); criteria.UserId = request.UserId; criteria.IsRead = false; + criteria.WithHidden = true; criteria.Take = 50; return criteria; diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesUnreadCommandHandler.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesUnreadCommandHandler.cs index 1c02ea0..f2bc0f7 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesUnreadCommandHandler.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkAllPushMessagesUnreadCommandHandler.cs @@ -50,6 +50,7 @@ private static PushMessageRecipientSearchCriteria GetSearchCriteria(PushMessages var criteria = AbstractTypeFactory.TryCreateInstance(); criteria.UserId = request.UserId; criteria.IsRead = true; + criteria.WithHidden = true; criteria.Take = 50; return criteria; diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageReadCommandHandler.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageReadCommandHandler.cs index ce124fa..537487a 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageReadCommandHandler.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageReadCommandHandler.cs @@ -27,6 +27,7 @@ public async Task Handle(MarkPushMessageReadCommand request, CancellationT criteria.MessageId = request.MessageId; criteria.UserId = request.UserId; criteria.IsRead = false; + criteria.WithHidden = true; criteria.Take = 1; var searchResult = await _recipientSearchService.SearchAsync(criteria); diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageUnreadCommandHandler.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageUnreadCommandHandler.cs index d8acf8a..2782590 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageUnreadCommandHandler.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Commands/MarkPushMessageUnreadCommandHandler.cs @@ -27,6 +27,7 @@ public async Task Handle(MarkPushMessageUnreadCommand request, Cancellatio criteria.MessageId = request.MessageId; criteria.UserId = request.UserId; criteria.IsRead = true; + criteria.WithHidden = true; criteria.Take = 1; var searchResult = await _recipientSearchService.SearchAsync(criteria); diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessage.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessage.cs index 726e3b7..64bf8b7 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessage.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessage.cs @@ -13,5 +13,7 @@ public class ExpPushMessage public string UserId { get; set; } public bool IsRead { get; set; } + + public bool IsHidden { get; set; } } } diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessagesResponse.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessagesResponse.cs index c49cc38..056b222 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessagesResponse.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Models/ExpPushMessagesResponse.cs @@ -1,11 +1,8 @@ -using System.Collections.Generic; +using VirtoCommerce.Platform.Core.Common; namespace VirtoCommerce.PushMessages.ExperienceApi.Models { - public class ExpPushMessagesResponse + public class ExpPushMessagesResponse : GenericSearchResult { - public int UnreadCount { get; set; } - - public IList Items { get; set; } = []; } } diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQuery.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQuery.cs index c19b99d..aad91fa 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQuery.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQuery.cs @@ -6,23 +6,34 @@ namespace VirtoCommerce.PushMessages.ExperienceApi.Queries { - public class GetPushMessagesQuery : Query + public class GetPushMessagesQuery : SearchQuery { public bool UnreadOnly { get; set; } + public bool WithHidden { get; set; } + public string CultureName { get; set; } public string UserId { get; set; } public override IEnumerable GetArguments() { + foreach (var argument in base.GetArguments()) + { + yield return argument; + } + yield return Argument(nameof(UnreadOnly)); + yield return Argument(nameof(WithHidden)); yield return Argument(nameof(CultureName)); } public override void Map(IResolveFieldContext context) { + base.Map(context); + UnreadOnly = context.GetArgument(nameof(UnreadOnly)); + WithHidden = context.GetArgument(nameof(WithHidden)); CultureName = context.GetArgument(nameof(CultureName)); } } diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryBuilder.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryBuilder.cs index 7137994..0f95c2a 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryBuilder.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryBuilder.cs @@ -1,6 +1,5 @@ using System.Threading.Tasks; using GraphQL; -using GraphQL.Types; using MediatR; using Microsoft.AspNetCore.Authorization; using VirtoCommerce.ExperienceApiModule.Core.BaseQueries; @@ -11,7 +10,7 @@ namespace VirtoCommerce.PushMessages.ExperienceApi.Queries { - public class GetPushMessagesQueryBuilder : QueryBuilder> + public class GetPushMessagesQueryBuilder : SearchQueryBuilder { protected override string Name => "pushMessages"; diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryHandler.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryHandler.cs index 1fecfff..85f358f 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryHandler.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Queries/GetPushMessagesQueryHandler.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -21,29 +20,28 @@ public GetPushMessagesQueryHandler(IPushMessageRecipientSearchService recipientS public async Task Handle(GetPushMessagesQuery request, CancellationToken cancellationToken) { + var criteria = GetSearchCriteria(request); + var searchResult = await _recipientSearchService.SearchAsync(criteria); + var result = AbstractTypeFactory.TryCreateInstance(); - result.Items = await SearchMessages(request); - result.UnreadCount = result.Items.Count(x => !x.IsRead); + result.Results = searchResult.Results.Select(ToExpPushMessage).ToList(); + result.TotalCount = searchResult.TotalCount; return result; } - private async Task> SearchMessages(GetPushMessagesQuery request) + private static ExpPushMessage ToExpPushMessage(PushMessageRecipient recipient) { - var criteria = GetSearchCriteria(request); - var messages = await _recipientSearchService.SearchAllNoCloneAsync(criteria); - - return messages - .Select(x => - new ExpPushMessage - { - Id = x.Message.Id, - ShortMessage = x.Message.ShortMessage, - CreatedDate = x.Message.CreatedDate, - UserId = x.UserId, - IsRead = x.IsRead, - }) - .ToList(); + var message = AbstractTypeFactory.TryCreateInstance(); + + message.Id = recipient.Message.Id; + message.ShortMessage = recipient.Message.ShortMessage; + message.CreatedDate = recipient.Message.CreatedDate; + message.UserId = recipient.UserId; + message.IsRead = recipient.IsRead; + message.IsHidden = recipient.IsHidden; + + return message; } private static PushMessageRecipientSearchCriteria GetSearchCriteria(GetPushMessagesQuery request) @@ -51,7 +49,10 @@ private static PushMessageRecipientSearchCriteria GetSearchCriteria(GetPushMessa var criteria = AbstractTypeFactory.TryCreateInstance(); criteria.UserId = request.UserId; criteria.IsRead = request.UnreadOnly ? false : null; - criteria.Take = 50; + criteria.WithHidden = request.WithHidden; + criteria.Keyword = request.Keyword; + criteria.Skip = request.Skip; + criteria.Take = request.Take; criteria.ResponseGroup = PushMessageRecipientResponseGroup.WithMessages.ToString(); return criteria; diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessageType.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessageType.cs index 781f73e..377842a 100644 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessageType.cs +++ b/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessageType.cs @@ -11,6 +11,7 @@ public PushMessageType() Field(x => x.ShortMessage, nullable: false); Field(x => x.CreatedDate, nullable: false); Field(x => x.IsRead, nullable: false); + Field(x => x.IsHidden, nullable: false); } } } diff --git a/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessagesResponseType.cs b/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessagesResponseType.cs deleted file mode 100644 index 6da91f2..0000000 --- a/src/VirtoCommerce.PushMessages.ExperienceApi/Schemas/PushMessagesResponseType.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GraphQL.Types; -using VirtoCommerce.PushMessages.ExperienceApi.Models; - -namespace VirtoCommerce.PushMessages.ExperienceApi.Schemas -{ - public class PushMessagesResponseType : ObjectGraphType - { - public PushMessagesResponseType() - { - Field(x => x.UnreadCount, nullable: false); - Field>>>("items", resolve: x => x.Source.Items); - } - } -}