using AutoMapper; using IM_API.Dtos; using IM_API.Exceptions; using IM_API.Interface.Services; using IM_API.Models; using IM_API.Tools; using Microsoft.EntityFrameworkCore; namespace IM_API.Services { public class MessageService : IMessageSevice { private readonly ImContext _context; private readonly ILogger _logger; private readonly IMapper _mapper; public MessageService(ImContext context, ILogger logger, IMapper mapper) { _context = context; _logger = logger; _mapper = mapper; } public Task> GetGroupMessagesAsync(int groupId, int page, int pageSize, bool desc) { throw new NotImplementedException(); } public Task> GetPrivateMessagesAsync(int userAId, int userBId, int page, int pageSize, bool desc) { throw new NotImplementedException(); } public Task GetUnreadCountAsync(int userId) { throw new NotImplementedException(); } public Task> GetUnreadMessagesAsync(int userId) { throw new NotImplementedException(); } public Task MarkAsReadAsync(int userId, long messageId) { throw new NotImplementedException(); } public Task MarkConversationAsReadAsync(int userId, int? userBId, int? groupId) { throw new NotImplementedException(); } public Task RecallMessageAsync(int userId, int messageId) { throw new NotImplementedException(); } #region 发送群消息 public async Task SendGroupMessageAsync(int senderId, int groupId, MessageBaseDto dto) { //判断群存在 var isExist = await _context.Groups.AnyAsync(x => x.Id == groupId); if (!isExist) throw new BaseException(CodeDefine.GROUP_NOT_FOUND); //判断是否是群成员 var isMember = await _context.GroupMembers.AnyAsync(x => x.GroupId == groupId && x.UserId == senderId); if (!isMember) throw new BaseException(CodeDefine.NO_GROUP_PERMISSION); var message = _mapper.Map(dto); message.Sender = senderId; message.StreamKey = StreamKeyBuilder.Group(groupId); _context.Messages.Add(message); await _context.SaveChangesAsync(); return true; } #endregion #region 发送私聊消息 public async Task SendPrivateMessageAsync(int senderId, int receiverId, MessageBaseDto dto) { bool isExist = await _context.Friends.AnyAsync(x => x.FriendId == receiverId); if (!isExist) throw new BaseException(CodeDefine.FRIEND_RELATION_NOT_FOUND); var message = _mapper.Map(dto); message.Sender = senderId; //生成消息流唯一标识符 message.StreamKey = StreamKeyBuilder.Private(dto.SenderId, dto.ReceiverId); _context.Messages.Add(message); await _context.SaveChangesAsync(); return true; } #endregion } }