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
@@ -31,28 +31,25 @@ 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);
} }
if (latestMessage != null)
{
userIdsToFetch.Add(latestMessage.SenderId); userIdsToFetch.Add(latestMessage.SenderId);
foreach (var r in latestMessage.Reactions) foreach (var r in latestMessage.Reactions)
{ {
userIdsToFetch.Add(r.UserId); userIdsToFetch.Add(r.UserId);
} }
}
var usersInfo = await _userProvider.GetUsersInfoAsync(userIdsToFetch, cancellationToken); var usersInfo = await _userProvider.GetUsersInfoAsync(userIdsToFetch, cancellationToken);
@@ -76,6 +73,10 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
)); ));
} }
var messagesList = new List<ChatMessageDto>();
if (latestMessage != null)
{
usersInfo.TryGetValue(latestMessage.SenderId, out var senderObj); usersInfo.TryGetValue(latestMessage.SenderId, out var senderObj);
var reactionsWithUser = new List<ReactionDto>(); var reactionsWithUser = new List<ReactionDto>();
@@ -92,9 +93,7 @@ internal sealed class GetChatsQueryHandler : IQueryHandler<GetChatsQuery, List<C
)); ));
} }
var messagesList = new List<ChatMessageDto> messagesList.Add(new ChatMessageDto(
{
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>