Fix favorites chat logic and story avatar layout

This commit is contained in:
Халимов Рустам
2026-03-19 23:15:30 +03:00
parent 24f029c9ed
commit a48a0b0977
2 changed files with 28 additions and 36 deletions

View File

@@ -31,27 +31,24 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
{
var userChats = await _chatRepository.GetUserChatsAsync(request.UserId, cancellationToken);
var dtos = new List<ChatDto>();
bool hasFavorites = false;
foreach (var chat in userChats)
{
var latestMessage = await _messageRepository.GetLatestChatMessageAsync(chat.Id, cancellationToken);
if (latestMessage == null)
{
continue;
}
var userIdsToFetch = new HashSet<Guid>();
foreach (var member in chat.Members)
{
userIdsToFetch.Add(member.UserId);
}
userIdsToFetch.Add(latestMessage.SenderId);
foreach (var r in latestMessage.Reactions)
if (latestMessage != null)
{
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);
@@ -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>();
foreach (var reaction in latestMessage.Reactions)
if (latestMessage != null)
{
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)
));
}
usersInfo.TryGetValue(latestMessage.SenderId, out var senderObj);
var messagesList = new List<ChatMessageDto>
{
new ChatMessageDto(
var reactionsWithUser = new List<ReactionDto>();
foreach (var reaction in latestMessage.Reactions)
{
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.ChatId,
latestMessage.SenderId,
@@ -117,8 +116,8 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
) : new MessageSenderDto(latestMessage.SenderId, "unknown", "Unknown", null),
reactionsWithUser,
latestMessage.ReadBy.Select(readReceipt => new ReadByDto(readReceipt.UserId)).ToList()
)
};
));
}
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();
return Result.Success(sorted);
}

View File

@@ -178,12 +178,11 @@ export default function Sidebar() {
? 'border border-zinc-600'
: '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
src={avatarUrl}
name={group.user.displayName || group.user.username}
size="md"
className="w-full h-full"
/>
</div>
</div>