前端:
1、优化消息排序逻辑 2、新增加载历史消息 3、修复已知问题 后端: 1、优化消息排序逻辑 2、增加用户信息缓存机制 3、修改日期类型为DateTimeOffset改善时区信息丢失问题 3、修复了已知问题 数据库: 1、新增SequenceId字段用于消息排序 2、新增ClientMsgId字段用于客户端消息回执
This commit is contained in:
@@ -30,12 +30,12 @@ public partial class Admin
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime Updated { get; set; }
|
||||
public DateTimeOffset Updated { get; set; }
|
||||
|
||||
public virtual Role Role { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -20,14 +21,14 @@ public partial class Conversation
|
||||
/// <summary>
|
||||
/// 最后一条未读消息ID
|
||||
/// </summary>
|
||||
public int? LastReadMessageId { get; set; }
|
||||
public long? LastReadSequenceId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 未读消息数
|
||||
/// </summary>
|
||||
public int UnreadCount { get; set; }
|
||||
|
||||
public int ChatType { get; set; }
|
||||
public ChatType ChatType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 消息推送唯一标识符
|
||||
@@ -42,9 +43,9 @@ public partial class Conversation
|
||||
/// <summary>
|
||||
/// 最后一条消息发送时间
|
||||
/// </summary>
|
||||
public DateTime LastMessageTime { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset LastMessageTime { get; set; }
|
||||
|
||||
public virtual Message? LastReadMessage { get; set; }
|
||||
|
||||
public virtual User User { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using IM_API.Dtos.Conversation;
|
||||
|
||||
namespace IM_API.Models
|
||||
{
|
||||
public partial class Conversation
|
||||
{
|
||||
public ChatType ChatTypeEnum {
|
||||
get
|
||||
{
|
||||
return ChatType;
|
||||
}
|
||||
set
|
||||
{
|
||||
ChatType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -21,7 +22,8 @@ public partial class Device
|
||||
/// <summary>
|
||||
/// 最后一次登录
|
||||
/// </summary>
|
||||
public DateTime LastLogin { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset LastLogin { get; set; }
|
||||
|
||||
public virtual User User { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -25,7 +26,7 @@ public partial class File
|
||||
/// <summary>
|
||||
/// 文件类型
|
||||
/// </summary>
|
||||
public string Type { get; set; } = null!;
|
||||
public string FileType { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 关联消息ID
|
||||
@@ -35,7 +36,8 @@ public partial class File
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual Message Message { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -26,7 +27,8 @@ public partial class Friend
|
||||
/// <summary>
|
||||
/// 好友关系创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 好友备注名
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -20,7 +21,8 @@ public partial class FriendRequest
|
||||
/// <summary>
|
||||
/// 申请时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 申请附言
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -42,7 +43,8 @@ public partial class Group
|
||||
/// <summary>
|
||||
/// 群聊创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 群头像
|
||||
|
||||
@@ -31,7 +31,7 @@ public partial class GroupInvite
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? Created { get; set; }
|
||||
public DateTimeOffset? Created { get; set; }
|
||||
|
||||
public virtual Group Group { get; set; } = null!;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -25,7 +26,8 @@ public partial class GroupMember
|
||||
/// <summary>
|
||||
/// 加入群聊时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual Group Group { get; set; } = null!;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -31,7 +32,8 @@ public partial class GroupRequest
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual Group Group { get; set; } = null!;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace IM_API.Models
|
||||
});
|
||||
modelBuilder.Entity<Conversation>(entity =>
|
||||
{
|
||||
|
||||
entity.Ignore(e => e.ChatTypeEnum);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Device>(entity =>
|
||||
|
||||
@@ -101,7 +101,8 @@ public partial class ImContext : DbContext
|
||||
|
||||
entity.HasIndex(e => e.UserId, "Userid");
|
||||
|
||||
entity.HasIndex(e => e.LastReadMessageId, "lastMessageId");
|
||||
entity.HasIndex(e => e.LastReadSequenceId, "LastReadSequenceId");
|
||||
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("int(11)")
|
||||
@@ -113,7 +114,7 @@ public partial class ImContext : DbContext
|
||||
entity.Property(e => e.LastMessageTime)
|
||||
.HasComment("最后一条消息发送时间")
|
||||
.HasColumnType("datetime");
|
||||
entity.Property(e => e.LastReadMessageId)
|
||||
entity.Property(e => e.LastReadSequenceId)
|
||||
.HasComment("最后一条未读消息ID ")
|
||||
.HasColumnType("int(11)")
|
||||
.HasColumnName("lastReadMessageId");
|
||||
@@ -130,10 +131,6 @@ public partial class ImContext : DbContext
|
||||
.HasComment("用户")
|
||||
.HasColumnType("int(11)");
|
||||
|
||||
entity.HasOne(d => d.LastReadMessage).WithMany(p => p.Conversations)
|
||||
.HasForeignKey(d => d.LastReadMessageId)
|
||||
.HasConstraintName("conversations_ibfk_2");
|
||||
|
||||
entity.HasOne(d => d.User).WithMany(p => p.Conversations)
|
||||
.HasForeignKey(d => d.UserId)
|
||||
.OnDelete(DeleteBehavior.ClientSetNull)
|
||||
@@ -197,7 +194,7 @@ public partial class ImContext : DbContext
|
||||
entity.Property(e => e.Size)
|
||||
.HasComment("文件大小(单位:KB) ")
|
||||
.HasColumnType("int(11)");
|
||||
entity.Property(e => e.Type)
|
||||
entity.Property(e => e.FileType)
|
||||
.HasMaxLength(10)
|
||||
.HasComment("文件类型 ");
|
||||
entity.Property(e => e.Url)
|
||||
@@ -529,6 +526,11 @@ public partial class ImContext : DbContext
|
||||
|
||||
entity.HasIndex(e => e.Sender, "Sender");
|
||||
|
||||
|
||||
//设置联合唯一索引
|
||||
entity.HasIndex(e => new { e.SequenceId, e.StreamKey })
|
||||
.IsUnique();
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("int(11)")
|
||||
.HasColumnName("ID");
|
||||
@@ -541,9 +543,6 @@ public partial class ImContext : DbContext
|
||||
entity.Property(e => e.Created)
|
||||
.HasComment("发送时间 ")
|
||||
.HasColumnType("datetime");
|
||||
entity.Property(e => e.GroupMemberId)
|
||||
.HasComment("若为群消息则表示具体的成员id")
|
||||
.HasColumnType("int(11)");
|
||||
entity.Property(e => e.MsgType)
|
||||
.HasComment("消息类型\r\n(0:文本,1:图片,2:语音,3:视频,4:文件,5:语音聊天,6:视频聊天)")
|
||||
.HasColumnType("tinyint(4)");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -15,7 +16,8 @@ public partial class LoginLog
|
||||
/// <summary>
|
||||
/// 登录时间
|
||||
/// </summary>
|
||||
public DateTime Logined { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Logined { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 登录用户
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -18,6 +19,7 @@ public partial class Message
|
||||
/// (0:文本,1:图片,2:语音,3:视频,4:文件,5:语音聊天,6:视频聊天)
|
||||
/// </summary>
|
||||
public sbyte MsgType { get; set; }
|
||||
public Guid ClientMsgId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 消息内容
|
||||
@@ -42,7 +44,8 @@ public partial class Message
|
||||
/// <summary>
|
||||
/// 发送时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 消息推送唯一标识符
|
||||
@@ -50,9 +53,10 @@ public partial class Message
|
||||
public string StreamKey { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 若为群消息则表示具体的成员id
|
||||
/// 消息排序标识
|
||||
/// </summary>
|
||||
public int? GroupMemberId { get; set; }
|
||||
|
||||
public long SequenceId { get; set; }
|
||||
|
||||
public virtual ICollection<Conversation> Conversations { get; set; } = new List<Conversation>();
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -30,7 +31,8 @@ public partial class Notification
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual User User { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -25,7 +26,8 @@ public partial class Permission
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual ICollection<Permissionarole> Permissionaroles { get; set; } = new List<Permissionarole>();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -20,7 +21,8 @@ public partial class Role
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
public virtual ICollection<Admin> Admins { get; set; } = new List<Admin>();
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace IM_API.Models;
|
||||
|
||||
@@ -32,12 +33,13 @@ public partial class User
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime Created { get; set; }
|
||||
public DateTimeOffset Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? Updated { get; set; }
|
||||
[Column(TypeName = "datetimeoffset")]
|
||||
public DateTimeOffset? Updated { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 账户状态
|
||||
|
||||
Reference in New Issue
Block a user