Skip to content

Commit

Permalink
VCST-830: change pushMessages to connection (#2)
Browse files Browse the repository at this point in the history
Co-authored-by: artem-dudarev <[email protected]>
  • Loading branch information
ksavosteev and artem-dudarev authored Apr 22, 2024
1 parent 0825623 commit 6706b4b
Show file tree
Hide file tree
Showing 12 changed files with 45 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ protected override IQueryable<PushMessageRecipientEntity> 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;
Expand All @@ -67,7 +68,7 @@ protected override IList<SortInfo> 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) },
];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ private static PushMessageRecipientSearchCriteria GetSearchCriteria(MarkAllPushM
var criteria = AbstractTypeFactory<PushMessageRecipientSearchCriteria>.TryCreateInstance();
criteria.UserId = request.UserId;
criteria.IsRead = false;
criteria.WithHidden = true;
criteria.Take = 50;

return criteria;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ private static PushMessageRecipientSearchCriteria GetSearchCriteria(PushMessages
var criteria = AbstractTypeFactory<PushMessageRecipientSearchCriteria>.TryCreateInstance();
criteria.UserId = request.UserId;
criteria.IsRead = true;
criteria.WithHidden = true;
criteria.Take = 50;

return criteria;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public async Task<bool> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public async Task<bool> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@ public class ExpPushMessage
public string UserId { get; set; }

public bool IsRead { get; set; }

public bool IsHidden { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -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<ExpPushMessage>
{
public int UnreadCount { get; set; }

public IList<ExpPushMessage> Items { get; set; } = [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,34 @@

namespace VirtoCommerce.PushMessages.ExperienceApi.Queries
{
public class GetPushMessagesQuery : Query<ExpPushMessagesResponse>
public class GetPushMessagesQuery : SearchQuery<ExpPushMessagesResponse>
{
public bool UnreadOnly { get; set; }

public bool WithHidden { get; set; }

public string CultureName { get; set; }

public string UserId { get; set; }

public override IEnumerable<QueryArgument> GetArguments()
{
foreach (var argument in base.GetArguments())
{
yield return argument;
}

yield return Argument<BooleanGraphType>(nameof(UnreadOnly));
yield return Argument<BooleanGraphType>(nameof(WithHidden));
yield return Argument<StringGraphType>(nameof(CultureName));
}

public override void Map(IResolveFieldContext context)
{
base.Map(context);

UnreadOnly = context.GetArgument<bool>(nameof(UnreadOnly));
WithHidden = context.GetArgument<bool>(nameof(WithHidden));
CultureName = context.GetArgument<string>(nameof(CultureName));
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Threading.Tasks;
using GraphQL;
using GraphQL.Types;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using VirtoCommerce.ExperienceApiModule.Core.BaseQueries;
Expand All @@ -11,7 +10,7 @@

namespace VirtoCommerce.PushMessages.ExperienceApi.Queries
{
public class GetPushMessagesQueryBuilder : QueryBuilder<GetPushMessagesQuery, ExpPushMessagesResponse, NonNullGraphType<PushMessagesResponseType>>
public class GetPushMessagesQueryBuilder : SearchQueryBuilder<GetPushMessagesQuery, ExpPushMessagesResponse, ExpPushMessage, PushMessageType>
{
protected override string Name => "pushMessages";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -21,37 +20,39 @@ public GetPushMessagesQueryHandler(IPushMessageRecipientSearchService recipientS

public async Task<ExpPushMessagesResponse> Handle(GetPushMessagesQuery request, CancellationToken cancellationToken)
{
var criteria = GetSearchCriteria(request);
var searchResult = await _recipientSearchService.SearchAsync(criteria);

var result = AbstractTypeFactory<ExpPushMessagesResponse>.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<List<ExpPushMessage>> 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<ExpPushMessage>.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)
{
var criteria = AbstractTypeFactory<PushMessageRecipientSearchCriteria>.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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}

This file was deleted.

0 comments on commit 6706b4b

Please sign in to comment.