Fix favorites chat logic and story avatar layout
This commit is contained in:
@@ -31,27 +31,24 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
|
|||||||
{
|
{
|
||||||
var userChats = await _chatRepository.GetUserChatsAsync(request.UserId, cancellationToken);
|
var userChats = await _chatRepository.GetUserChatsAsync(request.UserId, cancellationToken);
|
||||||
var dtos = new List<ChatDto>();
|
var dtos = new List<ChatDto>();
|
||||||
bool hasFavorites = false;
|
|
||||||
|
|
||||||
foreach (var chat in userChats)
|
foreach (var chat in userChats)
|
||||||
{
|
{
|
||||||
var latestMessage = await _messageRepository.GetLatestChatMessageAsync(chat.Id, cancellationToken);
|
var latestMessage = await _messageRepository.GetLatestChatMessageAsync(chat.Id, cancellationToken);
|
||||||
|
|
||||||
if (latestMessage == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var userIdsToFetch = new HashSet<Guid>();
|
var userIdsToFetch = new HashSet<Guid>();
|
||||||
|
|
||||||
foreach (var member in chat.Members)
|
foreach (var member in chat.Members)
|
||||||
{
|
{
|
||||||
userIdsToFetch.Add(member.UserId);
|
userIdsToFetch.Add(member.UserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
userIdsToFetch.Add(latestMessage.SenderId);
|
if (latestMessage != null)
|
||||||
foreach (var r in latestMessage.Reactions)
|
|
||||||
{
|
{
|
||||||
userIdsToFetch.Add(r.UserId);
|
userIdsToFetch.Add(latestMessage.SenderId);
|
||||||
|
foreach (var r in latestMessage.Reactions)
|
||||||
|
{
|
||||||
|
userIdsToFetch.Add(r.UserId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var usersInfo = await _userProvider.GetUsersInfoAsync(userIdsToFetch, cancellationToken);
|
var usersInfo = await _userProvider.GetUsersInfoAsync(userIdsToFetch, cancellationToken);
|
||||||
@@ -76,25 +73,27 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
usersInfo.TryGetValue(latestMessage.SenderId, out var senderObj);
|
var messagesList = new List<ChatMessageDto>();
|
||||||
|
|
||||||
var reactionsWithUser = new List<ReactionDto>();
|
if (latestMessage != null)
|
||||||
foreach (var reaction in latestMessage.Reactions)
|
|
||||||
{
|
{
|
||||||
usersInfo.TryGetValue(reaction.UserId, out var reactionUser);
|
usersInfo.TryGetValue(latestMessage.SenderId, out var senderObj);
|
||||||
reactionsWithUser.Add(new ReactionDto(
|
|
||||||
reaction.Id,
|
|
||||||
reaction.Emoji,
|
|
||||||
reaction.UserId,
|
|
||||||
reactionUser != null
|
|
||||||
? new MessageSenderDto(reactionUser.Id, reactionUser.Username, reactionUser.DisplayName, reactionUser.Avatar)
|
|
||||||
: new MessageSenderDto(reaction.UserId, "unknown", "Unknown", null)
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
var messagesList = new List<ChatMessageDto>
|
var reactionsWithUser = new List<ReactionDto>();
|
||||||
{
|
foreach (var reaction in latestMessage.Reactions)
|
||||||
new ChatMessageDto(
|
{
|
||||||
|
usersInfo.TryGetValue(reaction.UserId, out var reactionUser);
|
||||||
|
reactionsWithUser.Add(new ReactionDto(
|
||||||
|
reaction.Id,
|
||||||
|
reaction.Emoji,
|
||||||
|
reaction.UserId,
|
||||||
|
reactionUser != null
|
||||||
|
? new MessageSenderDto(reactionUser.Id, reactionUser.Username, reactionUser.DisplayName, reactionUser.Avatar)
|
||||||
|
: new MessageSenderDto(reaction.UserId, "unknown", "Unknown", null)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
messagesList.Add(new ChatMessageDto(
|
||||||
latestMessage.Id,
|
latestMessage.Id,
|
||||||
latestMessage.ChatId,
|
latestMessage.ChatId,
|
||||||
latestMessage.SenderId,
|
latestMessage.SenderId,
|
||||||
@@ -117,8 +116,8 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
|
|||||||
) : new MessageSenderDto(latestMessage.SenderId, "unknown", "Unknown", null),
|
) : new MessageSenderDto(latestMessage.SenderId, "unknown", "Unknown", null),
|
||||||
reactionsWithUser,
|
reactionsWithUser,
|
||||||
latestMessage.ReadBy.Select(readReceipt => new ReadByDto(readReceipt.UserId)).ToList()
|
latestMessage.ReadBy.Select(readReceipt => new ReadByDto(readReceipt.UserId)).ToList()
|
||||||
)
|
));
|
||||||
};
|
}
|
||||||
|
|
||||||
var unreadCount = await _messageRepository.GetUnreadCountAsync(chat.Id, request.UserId, cancellationToken);
|
var unreadCount = await _messageRepository.GetUnreadCountAsync(chat.Id, request.UserId, cancellationToken);
|
||||||
|
|
||||||
@@ -135,12 +134,6 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasFavorites)
|
|
||||||
{
|
|
||||||
var favs = new ChatDto(Guid.Empty, "favorites", "Избранное", null, null, DateTime.UtcNow, new List<ChatMemberDto>(), new List<ChatMessageDto>(), 0);
|
|
||||||
dtos.Add(favs);
|
|
||||||
}
|
|
||||||
|
|
||||||
var sorted = dtos.OrderByDescending(d => d.Messages.FirstOrDefault()?.CreatedAt ?? d.CreatedAt).ToList();
|
var sorted = dtos.OrderByDescending(d => d.Messages.FirstOrDefault()?.CreatedAt ?? d.CreatedAt).ToList();
|
||||||
return Result.Success(sorted);
|
return Result.Success(sorted);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,12 +178,11 @@ export default function Sidebar() {
|
|||||||
? 'border border-zinc-600'
|
? 'border border-zinc-600'
|
||||||
: 'border border-zinc-700'
|
: 'border border-zinc-700'
|
||||||
}`}>
|
}`}>
|
||||||
<div className="w-[44px] h-[44px] rounded-full overflow-hidden">
|
<div className="w-[44px] h-[44px] rounded-full flex items-center justify-center overflow-hidden">
|
||||||
<Avatar
|
<Avatar
|
||||||
src={avatarUrl}
|
src={avatarUrl}
|
||||||
name={group.user.displayName || group.user.username}
|
name={group.user.displayName || group.user.username}
|
||||||
size="md"
|
size="md"
|
||||||
className="w-full h-full"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user