add(components): 添加MyInput组件

This commit is contained in:
2025-12-12 22:42:47 +08:00
parent d90366e304
commit fe4a9173a4
17 changed files with 721 additions and 498 deletions
+4 -2
View File
@@ -54,12 +54,14 @@ namespace IM_API.Configs
;
CreateMap<MessageBaseDto, Message>()
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.SenderId))
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => src.ChatType))
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.Type))
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => Enum.Parse<ChatType>(src.ChatType,true)))
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => Enum.Parse<MessageMsgType>(src.Type,true)))
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.TimeStamp))
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.ReceiverId))
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent))
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
.ForMember(dest => dest.MsgType, opt => opt.Ignore())
;
}
@@ -11,6 +11,7 @@ namespace IM_API.Configs
services.AddTransient<IAuthService, AuthService>();
services.AddTransient<IUserService, UserService>();
services.AddTransient<IFriendSerivce, FriendService>();
services.AddTransient<IMessageSevice, MessageService>();
services.AddSingleton<IJWTService, JWTService>();
services.AddSingleton<IRefreshTokenService,RedisRefreshTokenService>();
return services;
+2 -2
View File
@@ -6,13 +6,13 @@
/// <summary>
/// 聊天类型
/// </summary>
public ChatType ChatType { get; set; }
public MsgChatType ChatType { get; set; }
/// <summary>
/// 目标ID,聊天类型为群则为群id,私聊为用户id
/// </summary>
public int TargetId { get; set; }
}
public enum ChatType
public enum MsgChatType
{
/// <summary>
/// 私聊
+1 -1
View File
@@ -1,5 +1,5 @@
namespace IM_API.Dtos
{
public record MessageBaseDto(
string Type,string ChatType, string MsgId,int SenderId,int ReceiverId,string Content,DateTime TimeStamp);
string Type,string ChatType, string? MsgId,int SenderId,int ReceiverId,string Content,DateTime TimeStamp);
}
+66
View File
@@ -0,0 +1,66 @@
using IM_API.Tools;
namespace IM_API.Dtos
{
public class SignalRResponseDto
{
public string Type { get; set; }
public string Message { get; set; }
public int Code { get; set; }
public string Status { get; set; }
public SignalRResponseDto(SignalRResponseType type,CodeDefine codeDefine)
{
this.Type = type.ToString();
this.Code = codeDefine.Code;
this.Message = codeDefine.Message;
this.Status = codeDefine.Message;
}
public SignalRResponseDto(SignalRResponseType type)
{
this.Type = type.ToString();
this.Code = CodeDefine.SUCCESS.Code;
this.Message = CodeDefine.SUCCESS.Message;
this.Status = CodeDefine.SUCCESS.Message;
}
}
public enum SignalRResponseType
{
/// <summary>
/// 消息
/// </summary>
MESSAGE = 0,
/// <summary>
/// 鉴权
/// </summary>
AUTH = 1,
/// <summary>
/// 心跳
/// </summary>
HEARTBEAT = 2,
/// <summary>
/// 消息回执
/// </summary>
MESSAGE_ACK = 3,
/// <summary>
/// 消息撤回
/// </summary>
MESSAGE_RECALL = 4,
/// <summary>
/// 好友请求
/// </summary>
FRIEND_REQUEST = 5,
/// <summary>
/// 群邀请
/// </summary>
GROUP_INVITE = 6,
/// <summary>
/// 系统通知
/// </summary>
SYSTEM_NOTICE = 7,
/// <summary>
/// 错误
/// </summary>
ERROR = 8
}
}
+16 -9
View File
@@ -8,28 +8,35 @@ namespace IM_API.Hubs
{
public class ChatHub:Hub
{
private IJWTService _JWTService;
public ChatHub(IJWTService jWTService)
private IMessageSevice _messageService;
public ChatHub(IMessageSevice messageService)
{
_JWTService = jWTService;
_messageService = messageService;
}
public async override Task OnConnectedAsync()
{
var userIdStr = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
if(userIdStr is null)
if (!Context.User.Identity.IsAuthenticated)
{
await Clients.Caller.SendAsync("ReceiveMessage",new BaseResponse<object?>(CodeDefine.AUTH_FAILED));
Context.Abort();
return;
}
int userId = int.Parse(userIdStr);
await base.OnConnectedAsync();
}
public async Task SendMessage(MessageBaseDto dto)
public async Task SendPrivateMessage(MessageBaseDto dto)
{
await Clients.Caller.SendAsync("ReceiveMessage", "qwfqwfqw","test");
if (!Context.User.Identity.IsAuthenticated)
{
await Clients.Caller.SendAsync("ReceiveMessage", new BaseResponse<object?>(CodeDefine.AUTH_FAILED));
Context.Abort();
return;
}
var userIdStr = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
await _messageService.SendPrivateMessageAsync(int.Parse(userIdStr),dto.ReceiverId,dto);
await Clients.Caller.SendAsync("ReceiveMessage",userIdStr,"qfqwfqwfqw");
await Clients.Users(dto.ReceiverId.ToString()).SendAsync("ReceiveMessage", userIdStr, dto.Content);
return;
}
}
}
@@ -73,6 +73,7 @@ namespace IM_API.Models
{
entity.Ignore(e => e.StateEnum);
entity.Ignore(e => e.MsgTypeEnum);
entity.Ignore(e => e.ChatTypeEnum);
});
modelBuilder.Entity<Notification>(entity =>
+74
View File
@@ -0,0 +1,74 @@
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<MessageService> _logger;
private readonly IMapper _mapper;
public MessageService(ImContext context, ILogger<MessageService> logger, IMapper mapper)
{
_context = context;
_logger = logger;
_mapper = mapper;
}
public Task<List<MessageBaseDto>> GetGroupMessagesAsync(int groupId, int page, int pageSize, bool desc)
{
throw new NotImplementedException();
}
public Task<List<MessageBaseDto>> GetPrivateMessagesAsync(int userAId, int userBId, int page, int pageSize, bool desc)
{
throw new NotImplementedException();
}
public Task<int> GetUnreadCountAsync(int userId)
{
throw new NotImplementedException();
}
public Task<List<MessageBaseDto>> GetUnreadMessagesAsync(int userId)
{
throw new NotImplementedException();
}
public Task<bool> MarkAsReadAsync(int userId, long messageId)
{
throw new NotImplementedException();
}
public Task<bool> MarkConversationAsReadAsync(int userId, int? userBId, int? groupId)
{
throw new NotImplementedException();
}
public Task<bool> RecallMessageAsync(int userId, int messageId)
{
throw new NotImplementedException();
}
public Task<bool> SendGroupMessageAsync(int senderId, int groupId, MessageBaseDto dto)
{
throw new NotImplementedException();
}
public async Task<bool> 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<Message>(dto);
message.Sender = senderId;
_context.Messages.Add(message);
await _context.SaveChangesAsync();
return true;
}
}
}
+1 -1
View File
@@ -10,7 +10,7 @@
"Key": "YourSuperSecretKey123456784124214190!",
"Issuer": "IMDemo",
"Audience": "IMClients",
"AccessTokenMinutes": 15,
"AccessTokenMinutes": 30,
"RefreshTokenDays": 30
},
"ConnectionStrings": {