示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        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()
                });
            }
        }
示例#4
0
 public Task LeaveSession(ChatSessionInputBase input)
 {
     return(_chatSessionMemberRepository.DeleteAsync(member => member.SessionId == input.SessionId && member.UserId == input.UserId));
 }