221 lines
14 KiB
C#
221 lines
14 KiB
C#
using AutoMapper;
|
|
using IM_API.Domain.Events;
|
|
using IM_API.Dtos;
|
|
using IM_API.Dtos.Auth;
|
|
using IM_API.Dtos.Friend;
|
|
using IM_API.Dtos.Group;
|
|
using IM_API.Dtos.Message;
|
|
using IM_API.Dtos.User;
|
|
using IM_API.Models;
|
|
using IM_API.Models.Upload;
|
|
using IM_API.Tools;
|
|
using IM_API.VOs;
|
|
using IM_API.VOs.Conversation;
|
|
using IM_API.VOs.Group;
|
|
using IM_API.VOs.Message;
|
|
|
|
namespace IM_API.Configs
|
|
{
|
|
public class MapperConfig:Profile
|
|
{
|
|
public MapperConfig()
|
|
{
|
|
CreateMap<User, UserInfoDto>();
|
|
//用户信息更新模型转换
|
|
CreateMap<UpdateUserDto, User>()
|
|
.ForMember(dest => dest.Updated,opt => opt.MapFrom(src => DateTime.Now))
|
|
.ForAllMembers(opts => opts.Condition((src,dest,srcMember) => srcMember != null));
|
|
//用户注册模型转换
|
|
CreateMap<RegisterRequestDto, User>()
|
|
.ForMember(dest => dest.Username,opt => opt.MapFrom(src => src.Username))
|
|
.ForMember(dest => dest.Password,opt => opt.MapFrom(src => src.Password))
|
|
.ForMember(dest => dest.Avatar,opt => opt.MapFrom(src => "https://ts1.tc.mm.bing.net/th/id/OIP-C.dl0WpkTP6E2J4FnhDC_jHwAAAA?rs=1&pid=ImgDetMain&o=7&rm=3"))
|
|
.ForMember(dest => dest.StatusEnum,opt => opt.MapFrom(src => UserStatus.Normal))
|
|
.ForMember(dest => dest.OnlineStatusEnum,opt => opt.MapFrom(src => UserOnlineStatus.Offline))
|
|
.ForMember(dest => dest.NickName,opt => opt.MapFrom(src => src.NickName??"默认用户"))
|
|
.ForMember(dest => dest.Created,opt => opt.MapFrom(src => DateTime.Now))
|
|
.ForMember(dest => dest.IsDeleted,opt => opt.MapFrom(src => 0))
|
|
;
|
|
//好友信息模型转换
|
|
CreateMap<Friend, FriendInfoDto>()
|
|
.ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src.FriendNavigation))
|
|
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
|
|
;
|
|
//好友请求通过后新增好友关系
|
|
CreateMap<FriendRequestDto, Friend>()
|
|
.ForMember(dest => dest.UserId , opt => opt.MapFrom(src => src.FromUserId))
|
|
.ForMember(dest => dest.FriendId , opt => opt.MapFrom(src => src.ToUserId))
|
|
.ForMember(dest => dest.StatusEnum , opt =>opt.MapFrom(src => FriendStatus.Pending))
|
|
.ForMember(dest => dest.RemarkName , opt => opt.MapFrom(src => src.RemarkName))
|
|
.ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.Now))
|
|
;
|
|
//发起好友请求转换请求对象
|
|
CreateMap<FriendRequestDto, FriendRequest>()
|
|
.ForMember(dest => dest.RequestUser , opt => opt.MapFrom(src => src.FromUserId))
|
|
.ForMember(dest => dest.ResponseUser , opt => opt.MapFrom(src => src.ToUserId))
|
|
.ForMember(dest => dest.Created , opt => opt.MapFrom(src => DateTime.Now))
|
|
.ForMember(dest => dest.StateEnum , opt => opt.MapFrom(src => FriendRequestState.Pending))
|
|
.ForMember(dest => dest.Description , opt => opt.MapFrom(src => src.Description))
|
|
;
|
|
|
|
CreateMap<FriendRequest, FriendRequestDto>()
|
|
.ForMember(dest => dest.ToUserId, opt => opt.MapFrom(src => src.ResponseUser))
|
|
.ForMember(dest => dest.FromUserId, opt => opt.MapFrom(src => src.RequestUser))
|
|
.ForMember(dest => dest.RemarkName, opt => opt.MapFrom(src => src.RemarkName))
|
|
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
|
|
;
|
|
//消息模型转换
|
|
CreateMap<Message, MessageBaseVo>()
|
|
.ForMember(dest => dest.Type , opt => opt.MapFrom(src => src.MsgTypeEnum))
|
|
.ForMember(dest => dest.MsgId , opt => opt.MapFrom(src => src.ClientMsgId))
|
|
.ForMember(dest => dest.SenderId , opt => opt.MapFrom(src => src.Sender))
|
|
.ForMember(dest => dest.ChatType , opt => opt.MapFrom(src => src.ChatTypeEnum))
|
|
.ForMember(dest => dest.ReceiverId, opt => opt.MapFrom(src => src.Recipient))
|
|
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
|
|
.ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => src.Created))
|
|
.ForMember(dest => dest.SequenceId, opt => opt.MapFrom(src => src.SequenceId))
|
|
;
|
|
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.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.StreamKey, opt => opt.Ignore() )
|
|
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent))
|
|
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
|
.ForMember(dest => dest.MsgType, opt => opt.Ignore())
|
|
.ForMember(dest => dest.ClientMsgId, opt => opt.MapFrom(src => src.MsgId))
|
|
;
|
|
|
|
//会话对象深拷贝
|
|
CreateMap<Conversation, Conversation>()
|
|
.ForMember(dest => dest.Id, opt => opt.Ignore())
|
|
.ForMember(dest => dest.UserId, opt => opt.Ignore())
|
|
.ForMember(dest => dest.TargetId, opt => opt.Ignore())
|
|
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
|
.ForMember(dest => dest.StreamKey, opt => opt.Ignore())
|
|
;
|
|
|
|
//消息对象转消息创建事件对象
|
|
CreateMap<Message, MessageCreatedEvent>()
|
|
.ForMember(dest => dest.MessageMsgType, opt => opt.MapFrom(src => src.MsgTypeEnum))
|
|
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatTypeEnum))
|
|
.ForMember(dest => dest.MessageContent, opt => opt.MapFrom(src => src.Content))
|
|
.ForMember(dest => dest.State, opt => opt.MapFrom(src => src.StateEnum))
|
|
.ForMember(dest => dest.MessageCreated, opt => opt.MapFrom(src => src.Created))
|
|
.ForMember(dest => dest.MsgRecipientId, opt => opt.MapFrom(src => src.Recipient))
|
|
.ForMember(dest => dest.MsgSenderId, opt => opt.MapFrom(src => src.Sender))
|
|
.ForMember(dest => dest.EventId, opt => opt.MapFrom(src => Guid.NewGuid()))
|
|
.ForMember(dest => dest.AggregateId, opt => opt.MapFrom(src => src.Sender.ToString()))
|
|
.ForMember(dest => dest.OccurredAt , opt => opt.MapFrom(src => DateTime.Now))
|
|
.ForMember(dest => dest.OperatorId, opt => opt.MapFrom(src => src.Sender))
|
|
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
|
;
|
|
|
|
CreateMap<MessageCreatedEvent, Message>()
|
|
.ForMember(dest => dest.SequenceId, opt => opt.MapFrom(src => src.SequenceId))
|
|
.ForMember(dest => dest.ClientMsgId, opt => opt.MapFrom(src => src.ClientMsgId))
|
|
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => src.State))
|
|
.ForMember(dest => dest.ChatTypeEnum, opt => opt.MapFrom(src => src.ChatType))
|
|
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.MessageContent))
|
|
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.MessageCreated))
|
|
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.MessageMsgType))
|
|
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.MsgRecipientId))
|
|
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.MsgSenderId))
|
|
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
|
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
|
.ForMember(dest => dest.State, opt => opt.Ignore())
|
|
.ForMember(dest => dest.MsgType, opt => opt.Ignore());
|
|
|
|
//消息发送事件转换会话对象
|
|
CreateMap<MessageCreatedEvent, Conversation>()
|
|
//.ForMember(dest => dest.LastReadMessageId, opt => opt.MapFrom(src => src.MessageId))
|
|
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.MessageContent))
|
|
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatType))
|
|
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.MsgSenderId))
|
|
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.MsgRecipientId))
|
|
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => 0))
|
|
.ForMember(dest => dest.StreamKey, opt => opt.MapFrom(src => src.StreamKey))
|
|
.ForMember(dest => dest.LastMessageTime, opt => opt.MapFrom(src => DateTime.Now))
|
|
;
|
|
|
|
//创建会话对象
|
|
CreateMap<Conversation, ConversationVo>()
|
|
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
|
|
.ForMember(dest => dest.LastMessage, opt => opt.MapFrom(src => src.LastMessage))
|
|
.ForMember(dest => dest.LastSequenceId, opt => opt.MapFrom(src => src.LastReadSequenceId))
|
|
.ForMember(dest => dest.ChatType, opt => opt.MapFrom(src => src.ChatTypeEnum))
|
|
.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => src.LastMessageTime))
|
|
.ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.TargetId))
|
|
.ForMember(dest => dest.UnreadCount, opt => opt.MapFrom(src => src.UnreadCount))
|
|
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId));
|
|
|
|
CreateMap<Friend, ConversationVo>()
|
|
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
|
|
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.RemarkName));
|
|
|
|
CreateMap<Group, ConversationVo>()
|
|
.ForMember(dest => dest.TargetAvatar, opt => opt.MapFrom(src => src.Avatar))
|
|
.ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.Name));
|
|
|
|
|
|
//群模型转换
|
|
CreateMap<Group, GroupInfoDto>()
|
|
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.StatusEnum))
|
|
.ForMember(dest => dest.AllMembersBanned, opt => opt.MapFrom(src => src.AllMembersBannedEnum))
|
|
.ForMember(dest => dest.Auhority, opt => opt.MapFrom(src => src.AuhorityEnum));
|
|
|
|
CreateMap<GroupCreateDto, Group>()
|
|
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
|
|
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Avatar))
|
|
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => DateTime.Now))
|
|
.ForMember(dest => dest.AllMembersBannedEnum, opt => opt.MapFrom(src => GroupAllMembersBanned.ALLOWED))
|
|
.ForMember(dest => dest.AuhorityEnum, opt => opt.MapFrom(src => GroupAuhority.REQUIRE_CONSENT))
|
|
.ForMember(dest => dest.StatusEnum, opt => opt.MapFrom(src => GroupStatus.Normal))
|
|
;
|
|
|
|
//上传任务模型转换
|
|
CreateMap<CreateUploadTaskDto, UploadTask>()
|
|
.ForMember(dest => dest.FileName, opt => opt.MapFrom(src => src.FileName))
|
|
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => UploadStatus.Created))
|
|
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()))
|
|
.ForMember(dest => dest.FileSize, opt => opt.MapFrom(src => src.FileSize))
|
|
.ForMember(dest => dest.FileHash, opt => opt.MapFrom(src => src.FileHash))
|
|
.ForMember(dest => dest.ContentType, opt => opt.MapFrom(src => src.ContentType))
|
|
.ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => DateTime.UtcNow))
|
|
;
|
|
|
|
CreateMap<UploadTask, CreateUploadTaskVo>()
|
|
.ForMember(dest => dest.TaskId, opt => opt.MapFrom(src => src.Id))
|
|
.ForMember(dest => dest.ChunkSize, opt => opt.MapFrom(src => src.ChunkSize))
|
|
.ForMember(dest => dest.TotalChunks, opt => opt.MapFrom(src => src.TotalChunks))
|
|
.ForMember(dest => dest.Concurrency, opt => opt.MapFrom(src => 5))
|
|
.ForMember(dest => dest.Skip, opt => opt.MapFrom(src => false))
|
|
.ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
|
|
;
|
|
|
|
CreateMap<UploadTask, ImageDto>()
|
|
.ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
|
|
.ForMember(dest => dest.FileId, opt => opt.MapFrom(src => src.Id))
|
|
.ForMember(dest => dest.Provider, opt => opt.MapFrom(src => src.StorageProvider))
|
|
.ForMember(dest => dest.Format, opt => opt.MapFrom(src => src.ContentType))
|
|
.ForMember(dest => dest.Size, opt => opt.MapFrom(src => src.FileSize));
|
|
|
|
CreateMap<ImageDto, VideoDto>();
|
|
|
|
//群成员模型
|
|
CreateMap<UserInfoDto, GroupMemberVo>()
|
|
.ForMember(dest => dest.Nickname, opt => opt.MapFrom(src => src.NickName))
|
|
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Username))
|
|
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id))
|
|
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Avatar));
|
|
|
|
CreateMap<GroupMember, GroupMemberVo>()
|
|
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.Created))
|
|
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => src.RoleEnum));
|
|
}
|
|
}
|
|
}
|