public async Task <long> GetLastReadMessageId(ChatSessionInputBase input) { var lastReadMessageId = await _userChatMessageLogRepository.GetAll() .Where(log => log.SessionId == input.SessionId && log.UserId == input.UserId) .Select(log => log.LastReadMessageId).SingleOrDefaultAsync(); return(lastReadMessageId); }
public async Task <int> GetSessionUnread(ChatSessionInputBase input) { long lastMessageId = await _userChatMessageLogRepository.GetAll() .Where(log => log.SessionId == input.SessionId && log.UserId == input.UserId) .Select(log => log.LastReadMessageId).FirstOrDefaultAsync(); return(await _chatMessageRepository.CountAsync(message => message.SessionId == input.SessionId && message.Id > lastMessageId)); }
public async Task JoinSession(ChatSessionInputBase input) { var exists = await _chatSessionMemberRepository.GetAll() .AnyAsync(member => member.SessionId == input.SessionId && member.UserId == input.UserId, _httpContextAccessor.HttpContext.RequestAborted); if (!exists) { await _chatSessionMemberRepository.InsertAsync( new ChatSessionMember { SessionId = input.SessionId, TenantId = input.TenantId, UserId = input.UserId, CreationTime = DateTimeOffset.Now.ToUnixTimeMilliseconds() }); } }
public Task LeaveSession(ChatSessionInputBase input) { return(_chatSessionMemberRepository.DeleteAsync(member => member.SessionId == input.SessionId && member.UserId == input.UserId)); }