diff --git a/backend/IM_API/Interface/Services/IFriendSerivce.cs b/backend/IM_API/Interface/Services/IFriendSerivce.cs
index ecd620d..2b5fc3a 100644
--- a/backend/IM_API/Interface/Services/IFriendSerivce.cs
+++ b/backend/IM_API/Interface/Services/IFriendSerivce.cs
@@ -27,6 +27,6 @@ namespace IM_API.Interface.Services
///
///
///
- Task GetFriendRequestListAsync(int userId,bool isReceived,int page,int limit);
+ Task GetFriendRequestListAsync(int userId,bool isReceived,int page,int limit);
}
}
diff --git a/backend/IM_API/Models/Admin.cs b/backend/IM_API/Models/Admin.cs
index 0a848d5..2023a98 100644
--- a/backend/IM_API/Models/Admin.cs
+++ b/backend/IM_API/Models/Admin.cs
@@ -1,58 +1,41 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("admins")]
-[Index("RoleId", Name = "RoleId")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Admin
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 用户名
///
- [StringLength(50)]
public string Username { get; set; } = null!;
///
/// 密码
///
- [StringLength(50)]
public string Password { get; set; } = null!;
///
/// 角色
///
- [Column(TypeName = "int(11)")]
public int RoleId { get; set; }
///
/// 状态(0:正常,2:封禁)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte State { get; set; }
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
///
/// 更新时间
///
- [Column(TypeName = "datetime")]
public DateTime Updated { get; set; }
- [ForeignKey("RoleId")]
- [InverseProperty("Admins")]
public virtual Role Role { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/AdminExt.cs b/backend/IM_API/Models/AdminExt.cs
new file mode 100644
index 0000000..70b2a96
--- /dev/null
+++ b/backend/IM_API/Models/AdminExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class Admin
+ {
+ public AdminState StateEnum
+ {
+ get => (AdminState)State;
+ set => State = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/AdminState.cs b/backend/IM_API/Models/AdminState.cs
new file mode 100644
index 0000000..ca160b9
--- /dev/null
+++ b/backend/IM_API/Models/AdminState.cs
@@ -0,0 +1,8 @@
+namespace IM_API.Models
+{
+ public enum AdminState
+ {
+ Normal = 0,
+ Blocked = 2
+ }
+}
diff --git a/backend/IM_API/Models/Conversation.cs b/backend/IM_API/Models/Conversation.cs
index 5862d2a..344de36 100644
--- a/backend/IM_API/Models/Conversation.cs
+++ b/backend/IM_API/Models/Conversation.cs
@@ -1,57 +1,38 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("conversations")]
-[Index("Userid", Name = "Userid")]
-[Index("LastMessageId", Name = "lastMessageId")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Conversation
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 用户
///
- [Column(TypeName = "int(11)")]
- public int Userid { get; set; }
+ public int UserId { get; set; }
///
/// 对方ID(群聊为群聊ID,单聊为单聊ID)
///
- [Column(TypeName = "int(11)")]
- public int Targetid { get; set; }
+ public int TargetId { get; set; }
///
/// 消息类型(同Messages.MsgType)
///
- [Column(TypeName = "int(11)")]
public int MsgType { get; set; }
///
/// 最后一条消息ID
///
- [Column("lastMessageId", TypeName = "int(11)")]
public int LastMessageId { get; set; }
///
/// 未读消息数
///
- [Column("unreadCount", TypeName = "int(11)")]
public int UnreadCount { get; set; }
- [ForeignKey("LastMessageId")]
- [InverseProperty("Conversations")]
public virtual Message LastMessage { get; set; } = null!;
- [ForeignKey("Userid")]
- [InverseProperty("Conversations")]
public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Device.cs b/backend/IM_API/Models/Device.cs
index 61e494e..a0b6b17 100644
--- a/backend/IM_API/Models/Device.cs
+++ b/backend/IM_API/Models/Device.cs
@@ -1,41 +1,27 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("devices")]
-[Index("Userid", Name = "Userid")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Device
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 设备所属用户
///
- [Column(TypeName = "int(11)")]
- public int Userid { get; set; }
+ public int UserId { get; set; }
///
/// 设备类型(
/// 0:Android,1:Ios,2:PC,3:Pad,4:未知)
///
- [Column("DType", TypeName = "tinyint(4)")]
public sbyte Dtype { get; set; }
///
/// 最后一次登录
///
- [Column(TypeName = "datetime")]
public DateTime LastLogin { get; set; }
- [ForeignKey("Userid")]
- [InverseProperty("Devices")]
public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/DeviceDtype.cs b/backend/IM_API/Models/DeviceDtype.cs
new file mode 100644
index 0000000..117a96c
--- /dev/null
+++ b/backend/IM_API/Models/DeviceDtype.cs
@@ -0,0 +1,26 @@
+namespace IM_API.Models
+{
+ ///
+ /// 设备类型枚举
+ ///
+ public enum DeviceDtype
+ {
+ ///
+ /// 安卓端
+ ///
+ ANDROID = 0,
+ ///
+ /// IOS端
+ ///
+ IOS = 1,
+ ///
+ /// PC
+ ///
+ PC = 2,
+ PAD = 3,
+ ///
+ /// 未知端
+ ///
+ OTHER = 4
+ }
+}
diff --git a/backend/IM_API/Models/DeviceExt.cs b/backend/IM_API/Models/DeviceExt.cs
new file mode 100644
index 0000000..162b007
--- /dev/null
+++ b/backend/IM_API/Models/DeviceExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class Device
+ {
+ public DeviceDtype DtypeEnum
+ {
+ get => (DeviceDtype)Dtype;
+ set => Dtype = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/File.cs b/backend/IM_API/Models/File.cs
index 4f0cfd1..439b964 100644
--- a/backend/IM_API/Models/File.cs
+++ b/backend/IM_API/Models/File.cs
@@ -1,59 +1,41 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("files")]
-[Index("Messageld", Name = "Messageld")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class File
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 文件名
///
- [StringLength(50)]
public string Name { get; set; } = null!;
///
/// 文件储存URL
///
- [Column("URL")]
- [StringLength(100)]
public string Url { get; set; } = null!;
///
/// 文件大小(单位:KB)
///
- [Column(TypeName = "int(11)")]
public int Size { get; set; }
///
/// 文件类型
///
- [StringLength(10)]
public string Type { get; set; } = null!;
///
/// 关联消息ID
///
- [Column(TypeName = "int(11)")]
- public int Messageld { get; set; }
+ public int MessageId { get; set; }
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("Messageld")]
- [InverseProperty("Files")]
- public virtual Message MessageldNavigation { get; set; } = null!;
+ public virtual Message Message { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Friend.cs b/backend/IM_API/Models/Friend.cs
index 516e47a..65c5095 100644
--- a/backend/IM_API/Models/Friend.cs
+++ b/backend/IM_API/Models/Friend.cs
@@ -1,53 +1,34 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("friends")]
-[Index("Id", Name = "ID")]
-[Index("Userld", "Friendld", Name = "Userld")]
-[Index("Friendld", Name = "用户2id")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Friend
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 用户ID
///
- [Column(TypeName = "int(11)")]
- public int Userld { get; set; }
+ public int UserId { get; set; }
///
/// 用户2ID
///
- [Column(TypeName = "int(11)")]
- public int Friendld { get; set; }
+ public int FriendId { get; set; }
///
/// 当前好友关系状态
/// (0:待通过,1:已添加,2:已拒绝,3:已拉黑)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte Status { get; set; }
///
/// 好友关系创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("Friendld")]
- [InverseProperty("FriendFriendldNavigations")]
- public virtual User FriendldNavigation { get; set; } = null!;
+ public virtual User FriendNavigation { get; set; } = null!;
- [ForeignKey("Userld")]
- [InverseProperty("FriendUserldNavigations")]
- public virtual User UserldNavigation { get; set; } = null!;
+ public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/FriendExt.cs b/backend/IM_API/Models/FriendExt.cs
new file mode 100644
index 0000000..cc9e250
--- /dev/null
+++ b/backend/IM_API/Models/FriendExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class Friend
+ {
+ public FriendStatus StatusEnum
+ {
+ get => (FriendStatus)Status;
+ set => Status = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/FriendRequestExt.cs b/backend/IM_API/Models/FriendRequestExt.cs
new file mode 100644
index 0000000..0deaddb
--- /dev/null
+++ b/backend/IM_API/Models/FriendRequestExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class FriendRequest
+ {
+ public FriendRequestState StateEnum
+ {
+ get => (FriendRequestState)State;
+ set => State = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/FriendRequestState.cs b/backend/IM_API/Models/FriendRequestState.cs
new file mode 100644
index 0000000..e9eb8d2
--- /dev/null
+++ b/backend/IM_API/Models/FriendRequestState.cs
@@ -0,0 +1,25 @@
+namespace IM_API.Models
+{
+ ///
+ /// 好友请求状态
+ ///
+ public enum FriendRequestState
+ {
+ ///
+ /// 待处理
+ ///
+ Pending = 0,
+ ///
+ /// 已通过
+ ///
+ Passed = 2,
+ ///
+ /// 已拒绝
+ ///
+ Declined = 1,
+ ///
+ /// 拉黑
+ ///
+ Blocked = 3
+ }
+}
diff --git a/backend/IM_API/Models/FriendStatus.cs b/backend/IM_API/Models/FriendStatus.cs
index 08324a8..eb7c049 100644
--- a/backend/IM_API/Models/FriendStatus.cs
+++ b/backend/IM_API/Models/FriendStatus.cs
@@ -1,7 +1,25 @@
namespace IM_API.Models
{
+ ///
+ /// 好友关系状态
+ ///
public enum FriendStatus:SByte
{
-
+ ///
+ /// 待处理
+ ///
+ Pending = 0,
+ ///
+ /// 已添加
+ ///
+ Added = 1,
+ ///
+ /// 已拒绝
+ ///
+ Declined = 2,
+ ///
+ /// 已拉黑
+ ///
+ Blocked = 3
}
}
diff --git a/backend/IM_API/Models/Friendrequest.cs b/backend/IM_API/Models/Friendrequest.cs
index 990efe0..3897a5e 100644
--- a/backend/IM_API/Models/Friendrequest.cs
+++ b/backend/IM_API/Models/Friendrequest.cs
@@ -1,57 +1,38 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("friendrequest")]
-[Index("RequestUser", Name = "RequestUser")]
-[Index("ResponseUser", Name = "ResponseUser")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
-public partial class Friendrequest
+public partial class FriendRequest
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 申请人
///
- [Column(TypeName = "int(11)")]
public int RequestUser { get; set; }
///
/// 被申请人
///
- [Column(TypeName = "int(11)")]
public int ResponseUser { get; set; }
///
/// 申请时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
///
/// 申请附言
///
- [Column(TypeName = "text")]
public string? Description { get; set; }
///
/// 申请状态(0:待通过,1:拒绝,2:同意,3:拉黑)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte State { get; set; }
- [ForeignKey("RequestUser")]
- [InverseProperty("FriendrequestRequestUserNavigations")]
public virtual User RequestUserNavigation { get; set; } = null!;
- [ForeignKey("ResponseUser")]
- [InverseProperty("FriendrequestResponseUserNavigations")]
public virtual User ResponseUserNavigation { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Group.cs b/backend/IM_API/Models/Group.cs
index 7a27387..e4f89ae 100644
--- a/backend/IM_API/Models/Group.cs
+++ b/backend/IM_API/Models/Group.cs
@@ -1,73 +1,52 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("groups")]
-[Index("GroupMaster", Name = "GroupMaster")]
-[Index("Id", Name = "ID")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Group
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 群聊名称
///
- [StringLength(20)]
public string Name { get; set; } = null!;
///
/// 群主
///
- [Column(TypeName = "int(11)")]
public int GroupMaster { get; set; }
///
/// 群权限
/// (0:需管理员同意,1:任意人可加群,2:不允许任何人加入)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte Auhority { get; set; }
///
/// 全员禁言(0允许发言,2全员禁言)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte AllMembersBanned { get; set; }
///
/// 群聊状态
/// (1:正常,2:封禁)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte Status { get; set; }
///
/// 群公告
///
- [Column(TypeName = "text")]
public string? Announcement { get; set; }
///
/// 群聊创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("GroupMaster")]
- [InverseProperty("Groups")]
+ public virtual ICollection GroupInvites { get; set; } = new List();
+
public virtual User GroupMasterNavigation { get; set; } = null!;
- [InverseProperty("Group")]
- public virtual ICollection Groupinvites { get; set; } = new List();
-
- [InverseProperty("Group")]
- public virtual ICollection Grouprequests { get; set; } = new List();
+ public virtual ICollection GroupRequests { get; set; } = new List();
}
diff --git a/backend/IM_API/Models/GroupAllMembersBanned.cs b/backend/IM_API/Models/GroupAllMembersBanned.cs
new file mode 100644
index 0000000..10e253f
--- /dev/null
+++ b/backend/IM_API/Models/GroupAllMembersBanned.cs
@@ -0,0 +1,14 @@
+namespace IM_API.Models
+{
+ public enum GroupAllMembersBanned
+ {
+ ///
+ /// 可发言
+ ///
+ ALLOWED = 0,
+ ///
+ /// 全员禁言
+ ///
+ BANNED = 2
+ }
+}
diff --git a/backend/IM_API/Models/GroupAuhority.cs b/backend/IM_API/Models/GroupAuhority.cs
new file mode 100644
index 0000000..c7b70c0
--- /dev/null
+++ b/backend/IM_API/Models/GroupAuhority.cs
@@ -0,0 +1,22 @@
+namespace IM_API.Models
+{
+ ///
+ /// 群加入权限
+ ///
+ public enum GroupAuhority
+ {
+ ///
+ /// 需管理员同意
+ ///
+ REQUIRE_CONSENT = 0,
+ ///
+ /// 任何人可加入
+ ///
+ ANYONE_CAN_JOIN = 1,
+ ///
+ /// 不允许加入
+ ///
+ NOT_ALLOWED_TO_JOIN = 2
+
+ }
+}
diff --git a/backend/IM_API/Models/GroupExt.cs b/backend/IM_API/Models/GroupExt.cs
new file mode 100644
index 0000000..d9e2610
--- /dev/null
+++ b/backend/IM_API/Models/GroupExt.cs
@@ -0,0 +1,21 @@
+namespace IM_API.Models
+{
+ public partial class Group
+ {
+ public GroupAuhority AuhorityEnum
+ {
+ get => (GroupAuhority)Auhority;
+ set => Auhority = (sbyte) value;
+ }
+ public GroupAllMembersBanned AllMembersBannedEnum
+ {
+ get => (GroupAllMembersBanned)AllMembersBanned;
+ set => AllMembersBanned = (sbyte)value;
+ }
+ public GroupStatus StatusEnum
+ {
+ get => (GroupStatus)Status;
+ set => Status = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/GroupInviteExt.cs b/backend/IM_API/Models/GroupInviteExt.cs
new file mode 100644
index 0000000..1202368
--- /dev/null
+++ b/backend/IM_API/Models/GroupInviteExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class GroupInvite
+ {
+ public GroupInviteState StateEnum
+ {
+ get => (GroupInviteState)State;
+ set => State = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/GroupInviteState.cs b/backend/IM_API/Models/GroupInviteState.cs
new file mode 100644
index 0000000..0a69d35
--- /dev/null
+++ b/backend/IM_API/Models/GroupInviteState.cs
@@ -0,0 +1,17 @@
+namespace IM_API.Models
+{
+ ///
+ /// 群邀请状态
+ ///
+ public enum GroupInviteState
+ {
+ ///
+ /// 待处理
+ ///
+ Pending = 0,
+ ///
+ /// 已同意
+ ///
+ Passed = 1
+ }
+}
diff --git a/backend/IM_API/Models/GroupMemberExt.cs b/backend/IM_API/Models/GroupMemberExt.cs
new file mode 100644
index 0000000..5c47caa
--- /dev/null
+++ b/backend/IM_API/Models/GroupMemberExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class GroupMember
+ {
+ public GroupMemberRole RoleEnum
+ {
+ get => (GroupMemberRole)Role;
+ set => Role = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/GroupMemberRole.cs b/backend/IM_API/Models/GroupMemberRole.cs
new file mode 100644
index 0000000..6129e77
--- /dev/null
+++ b/backend/IM_API/Models/GroupMemberRole.cs
@@ -0,0 +1,18 @@
+namespace IM_API.Models
+{
+ public enum GroupMemberRole
+ {
+ ///
+ /// 普通成员
+ ///
+ Normal = 0,
+ ///
+ /// 管理员
+ ///
+ Administrator = 1,
+ ///
+ /// 群主
+ ///
+ Master = 2
+ }
+}
diff --git a/backend/IM_API/Models/GroupRequestExt.cs b/backend/IM_API/Models/GroupRequestExt.cs
new file mode 100644
index 0000000..be685ee
--- /dev/null
+++ b/backend/IM_API/Models/GroupRequestExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class GroupRequest
+ {
+ public GroupRequestState StateEnum
+ {
+ get => (GroupRequestState)State;
+ set => State = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/GroupRequestState.cs b/backend/IM_API/Models/GroupRequestState.cs
new file mode 100644
index 0000000..ccc0d94
--- /dev/null
+++ b/backend/IM_API/Models/GroupRequestState.cs
@@ -0,0 +1,18 @@
+namespace IM_API.Models
+{
+ public enum GroupRequestState
+ {
+ ///
+ /// 待管理员处理
+ ///
+ Pending = 0,
+ ///
+ /// 已拒绝
+ ///
+ Declined = 1,
+ ///
+ /// 已同意
+ ///
+ Passed = 2
+ }
+}
diff --git a/backend/IM_API/Models/GroupStatus.cs b/backend/IM_API/Models/GroupStatus.cs
new file mode 100644
index 0000000..a2d331e
--- /dev/null
+++ b/backend/IM_API/Models/GroupStatus.cs
@@ -0,0 +1,14 @@
+namespace IM_API.Models
+{
+ public enum GroupStatus
+ {
+ ///
+ /// 正常
+ ///
+ Normal = 1,
+ ///
+ /// 封禁
+ ///
+ Blocked = 2
+ }
+}
diff --git a/backend/IM_API/Models/Groupinvite.cs b/backend/IM_API/Models/Groupinvite.cs
index 2686629..3a1e1f5 100644
--- a/backend/IM_API/Models/Groupinvite.cs
+++ b/backend/IM_API/Models/Groupinvite.cs
@@ -1,63 +1,41 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("groupinvite")]
-[Index("GroupId", Name = "GroupId")]
-[Index("InviteUser", Name = "InviteUser")]
-[Index("InvitedUser", Name = "InvitedUser")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
-public partial class Groupinvite
+public partial class GroupInvite
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 群聊编号
///
- [Column(TypeName = "int(11)")]
public int GroupId { get; set; }
///
/// 被邀请用户
///
- [Column(TypeName = "int(11)")]
public int? InvitedUser { get; set; }
///
/// 邀请用户
///
- [Column(TypeName = "int(11)")]
public int? InviteUser { get; set; }
///
/// 当前状态(0:待被邀请人同意
/// 1:被邀请人已同意)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte? State { get; set; }
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime? Created { get; set; }
- [ForeignKey("GroupId")]
- [InverseProperty("Groupinvites")]
public virtual Group Group { get; set; } = null!;
- [ForeignKey("InviteUser")]
- [InverseProperty("GroupinviteInviteUserNavigations")]
public virtual User? InviteUserNavigation { get; set; }
- [ForeignKey("InvitedUser")]
- [InverseProperty("GroupinviteInvitedUserNavigations")]
public virtual User? InvitedUserNavigation { get; set; }
}
diff --git a/backend/IM_API/Models/Groupmember.cs b/backend/IM_API/Models/Groupmember.cs
index 7135b7e..0ff8f42 100644
--- a/backend/IM_API/Models/Groupmember.cs
+++ b/backend/IM_API/Models/Groupmember.cs
@@ -1,52 +1,32 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("groupmember")]
-[Index("Groupld", Name = "Groupld")]
-[Index("Id", Name = "ID")]
-[Index("Userld", Name = "Userld")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
-public partial class Groupmember
+public partial class GroupMember
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 用户编号
///
- [Column(TypeName = "int(11)")]
- public int Userld { get; set; }
+ public int UserId { get; set; }
///
/// 群聊编号
///
- [Column(TypeName = "int(11)")]
- public int Groupld { get; set; }
+ public int GroupId { get; set; }
///
/// 成员角色(0:普通成员,1:管理员,2:群主)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte Role { get; set; }
-
///
/// 加入群聊时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("Groupld")]
- [InverseProperty("GroupmemberGroupldNavigations")]
- public virtual User GroupldNavigation { get; set; } = null!;
+ public virtual User Group { get; set; } = null!;
- [ForeignKey("Userld")]
- [InverseProperty("GroupmemberUserldNavigations")]
- public virtual User UserldNavigation { get; set; } = null!;
+ public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Grouprequest.cs b/backend/IM_API/Models/Grouprequest.cs
index ec05da2..660802d 100644
--- a/backend/IM_API/Models/Grouprequest.cs
+++ b/backend/IM_API/Models/Grouprequest.cs
@@ -1,57 +1,39 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("grouprequest")]
-[Index("GroupId", Name = "GroupId")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
-public partial class Grouprequest
+public partial class GroupRequest
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 群聊编号
///
///
- [Column(TypeName = "int(11)")]
public int GroupId { get; set; }
///
/// 申请人
///
- [Column(TypeName = "int(11)")]
public int UserId { get; set; }
///
/// 申请状态(0:待管理员同意,1:已拒绝,2:已同意)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte State { get; set; }
///
/// 入群附言
///
- [Column(TypeName = "text")]
public string Description { get; set; } = null!;
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("GroupId")]
- [InverseProperty("Grouprequests")]
public virtual Group Group { get; set; } = null!;
- [ForeignKey("GroupId")]
- [InverseProperty("Grouprequests")]
public virtual User GroupNavigation { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/IMDbContext.cs b/backend/IM_API/Models/IMDbContext.cs
deleted file mode 100644
index 5215258..0000000
--- a/backend/IM_API/Models/IMDbContext.cs
+++ /dev/null
@@ -1,339 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore;
-using Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal;
-
-namespace IM_API.Models;
-
-public partial class IMDbContext : DbContext
-{
- public IMDbContext()
- {
- }
-
- public IMDbContext(DbContextOptions options)
- : base(options)
- {
- }
-
- public virtual DbSet Admins { get; set; }
-
- public virtual DbSet Conversations { get; set; }
-
- public virtual DbSet Devices { get; set; }
-
- public virtual DbSet Files { get; set; }
-
- public virtual DbSet Friends { get; set; }
-
- public virtual DbSet Friendrequests { get; set; }
-
- public virtual DbSet Groups { get; set; }
-
- public virtual DbSet Groupinvites { get; set; }
-
- public virtual DbSet Groupmembers { get; set; }
-
- public virtual DbSet Grouprequests { get; set; }
-
- public virtual DbSet LoginLogs { get; set; }
-
- public virtual DbSet Messages { get; set; }
-
- public virtual DbSet Notifications { get; set; }
-
- public virtual DbSet Permissions { get; set; }
-
- public virtual DbSet Permissionaroles { get; set; }
-
- public virtual DbSet Roles { get; set; }
-
- public virtual DbSet Users { get; set; }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder
- .UseCollation("latin1_swedish_ci")
- .HasCharSet("latin1");
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("创建时间 ");
- entity.Property(e => e.Password).HasComment("密码");
- entity.Property(e => e.RoleId).HasComment("角色");
- entity.Property(e => e.State).HasComment("状态(0:正常,2:封禁) ");
- entity.Property(e => e.Updated).HasComment("更新时间 ");
- entity.Property(e => e.Username).HasComment("用户名");
-
- entity.HasOne(d => d.Role).WithMany(p => p.Admins)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("admins_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.LastMessageId).HasComment("最后一条消息ID ");
- entity.Property(e => e.MsgType).HasComment("消息类型(同Messages.MsgType) ");
- entity.Property(e => e.Targetid).HasComment("对方ID(群聊为群聊ID,单聊为单聊ID) ");
- entity.Property(e => e.UnreadCount).HasComment("未读消息数 ");
- entity.Property(e => e.Userid).HasComment("用户");
-
- entity.HasOne(d => d.LastMessage).WithMany(p => p.Conversations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("conversations_ibfk_2");
-
- entity.HasOne(d => d.User).WithMany(p => p.Conversations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("conversations_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Dtype).HasComment("设备类型(\r\n0:Android,1:Ios,2:PC,3:Pad,4:未知)");
- entity.Property(e => e.LastLogin).HasComment("最后一次登录 ");
- entity.Property(e => e.Userid).HasComment("设备所属用户 ");
-
- entity.HasOne(d => d.User).WithMany(p => p.Devices)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("devices_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("创建时间 ");
- entity.Property(e => e.Messageld).HasComment("关联消息ID ");
- entity.Property(e => e.Name).HasComment("文件名 ");
- entity.Property(e => e.Size).HasComment("文件大小(单位:KB) ");
- entity.Property(e => e.Type).HasComment("文件类型 ");
- entity.Property(e => e.Url).HasComment("文件储存URL ");
-
- entity.HasOne(d => d.MessageldNavigation).WithMany(p => p.Files)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("files_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("好友关系创建时间");
- entity.Property(e => e.Friendld).HasComment("用户2ID");
- entity.Property(e => e.Status).HasComment("当前好友关系状态\r\n(0:待通过,1:已添加,2:已拒绝,3:已拉黑)");
- entity.Property(e => e.Userld).HasComment("用户ID");
-
- entity.HasOne(d => d.FriendldNavigation).WithMany(p => p.FriendFriendldNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("用户2id");
-
- entity.HasOne(d => d.UserldNavigation).WithMany(p => p.FriendUserldNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("用户id");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("申请时间 ");
- entity.Property(e => e.Description).HasComment("申请附言 ");
- entity.Property(e => e.RequestUser).HasComment("申请人 ");
- entity.Property(e => e.ResponseUser).HasComment("被申请人 ");
- entity.Property(e => e.State).HasComment("申请状态(0:待通过,1:拒绝,2:同意,3:拉黑) ");
-
- entity.HasOne(d => d.RequestUserNavigation).WithMany(p => p.FriendrequestRequestUserNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("friendrequest_ibfk_1");
-
- entity.HasOne(d => d.ResponseUserNavigation).WithMany(p => p.FriendrequestResponseUserNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("friendrequest_ibfk_2");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.AllMembersBanned).HasComment("全员禁言(0允许发言,2全员禁言)");
- entity.Property(e => e.Announcement).HasComment("群公告");
- entity.Property(e => e.Auhority).HasComment("群权限\r\n(0:需管理员同意,1:任意人可加群,2:不允许任何人加入)");
- entity.Property(e => e.Created).HasComment("群聊创建时间");
- entity.Property(e => e.GroupMaster).HasComment("群主");
- entity.Property(e => e.Name).HasComment("群聊名称");
- entity.Property(e => e.Status).HasComment("群聊状态\r\n(1:正常,2:封禁)");
-
- entity.HasOne(d => d.GroupMasterNavigation).WithMany(p => p.Groups)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("groups_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("创建时间");
- entity.Property(e => e.GroupId).HasComment("群聊编号");
- entity.Property(e => e.InviteUser).HasComment("邀请用户");
- entity.Property(e => e.InvitedUser).HasComment("被邀请用户");
- entity.Property(e => e.State).HasComment("当前状态(0:待被邀请人同意\r\n1:被邀请人已同意)");
-
- entity.HasOne(d => d.Group).WithMany(p => p.Groupinvites)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("groupinvite_ibfk_2");
-
- entity.HasOne(d => d.InviteUserNavigation).WithMany(p => p.GroupinviteInviteUserNavigations).HasConstraintName("groupinvite_ibfk_1");
-
- entity.HasOne(d => d.InvitedUserNavigation).WithMany(p => p.GroupinviteInvitedUserNavigations).HasConstraintName("groupinvite_ibfk_3");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created)
- .HasDefaultValueSql("'1970-01-01 00:00:00'")
- .HasComment("加入群聊时间");
- entity.Property(e => e.Groupld).HasComment("群聊编号");
- entity.Property(e => e.Role).HasComment("成员角色(0:普通成员,1:管理员,2:群主)");
- entity.Property(e => e.Userld).HasComment("用户编号");
-
- entity.HasOne(d => d.GroupldNavigation).WithMany(p => p.GroupmemberGroupldNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("groupmember_ibfk_2");
-
- entity.HasOne(d => d.UserldNavigation).WithMany(p => p.GroupmemberUserldNavigations)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("groupmember_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("创建时间");
- entity.Property(e => e.Description).HasComment("入群附言");
- entity.Property(e => e.GroupId).HasComment("群聊编号\r\n");
- entity.Property(e => e.State).HasComment("申请状态(0:待管理员同意,1:已拒绝,2:已同意)");
- entity.Property(e => e.UserId).HasComment("申请人 ");
-
- entity.HasOne(d => d.Group).WithMany(p => p.Grouprequests)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("grouprequest_ibfk_1");
-
- entity.HasOne(d => d.GroupNavigation).WithMany(p => p.Grouprequests)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("grouprequest_ibfk_2");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Dtype).HasComment("设备类型(通Devices/DType) ");
- entity.Property(e => e.Logined).HasComment("登录时间 ");
- entity.Property(e => e.State).HasComment("登录状态(0:登陆成功,1:未验证,2:已被拒绝) ");
- entity.Property(e => e.Userld).HasComment("登录用户 ");
-
- entity.HasOne(d => d.UserldNavigation).WithMany(p => p.LoginLogs)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("login_log_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.ChatType).HasComment("聊天类型\r\n(0:私聊,1:群聊)");
- entity.Property(e => e.Content).HasComment("消息内容 ");
- entity.Property(e => e.Created).HasComment("发送时间 ");
- entity.Property(e => e.MsgType).HasComment("消息类型\r\n(0:文本,1:图片,2:语音,3:视频,4:文件,5:语音聊天,6:视频聊天)");
- entity.Property(e => e.Recipient).HasComment("接收者(私聊为用户ID,群聊为群聊ID) ");
- entity.Property(e => e.Sender).HasComment("发送者 ");
- entity.Property(e => e.State).HasComment("消息状态(0:已发送,1:已撤回) ");
-
- entity.HasOne(d => d.SenderNavigation).WithMany(p => p.Messages)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("messages_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Content).HasComment("通知内容");
- entity.Property(e => e.Created).HasComment("创建时间");
- entity.Property(e => e.Ntype).HasComment("通知类型(0:文本)");
- entity.Property(e => e.Title).HasComment("通知标题");
- entity.Property(e => e.Userld).HasComment("接收人(为空为全体通知)");
-
- entity.HasOne(d => d.UserldNavigation).WithMany(p => p.Notifications)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("notifications_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Code).HasComment("权限编码 ");
- entity.Property(e => e.Created).HasComment("创建时间 ");
- entity.Property(e => e.Name).HasComment("权限名称 ");
- entity.Property(e => e.Ptype).HasComment("权限类型(0:增,1:删,2:改,3:查) ");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Id).ValueGeneratedNever();
- entity.Property(e => e.Permissionld).HasComment("权限 ");
- entity.Property(e => e.Roleld).HasComment("角色 ");
-
- entity.HasOne(d => d.PermissionldNavigation).WithMany(p => p.Permissionaroles)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("permissionarole_ibfk_2");
-
- entity.HasOne(d => d.RoleldNavigation).WithMany(p => p.Permissionaroles)
- .OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("permissionarole_ibfk_1");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created).HasComment("创建时间 ");
- entity.Property(e => e.Description).HasComment("角色描述 ");
- entity.Property(e => e.Name).HasComment("角色名称 ");
- });
-
- modelBuilder.Entity(entity =>
- {
- entity.HasKey(e => e.Id).HasName("PRIMARY");
-
- entity.Property(e => e.Created)
- .HasDefaultValueSql("'1970-01-01 00:00:00'")
- .HasComment("创建时间");
- entity.Property(e => e.IsDeleted).HasComment("软删除标识\r\n0:账号正常\r\n1:账号已删除");
- entity.Property(e => e.NickName).HasComment("用户昵称");
- entity.Property(e => e.OlineStatus).HasComment("用户在线状态\r\n0(默认):不在线\r\n1:在线");
- entity.Property(e => e.Password).HasComment("密码");
- entity.Property(e => e.Status)
- .HasDefaultValueSql("'1'")
- .HasComment("账户状态\r\n(0:未激活,1:正常,2:封禁)");
- entity.Property(e => e.Updated).HasComment("修改时间");
- entity.Property(e => e.Username).HasComment("唯一用户名");
- });
-
- OnModelCreatingPartial(modelBuilder);
- }
-
- partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
-}
diff --git a/backend/IM_API/Models/ImContext.cs b/backend/IM_API/Models/ImContext.cs
new file mode 100644
index 0000000..7a8e476
--- /dev/null
+++ b/backend/IM_API/Models/ImContext.cs
@@ -0,0 +1,724 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+using Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal;
+
+namespace IM_API.Models;
+
+public partial class ImContext : DbContext
+{
+ public ImContext()
+ {
+ }
+
+ public ImContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ public virtual DbSet Admins { get; set; }
+
+ public virtual DbSet Conversations { get; set; }
+
+ public virtual DbSet Devices { get; set; }
+
+ public virtual DbSet Files { get; set; }
+
+ public virtual DbSet Friends { get; set; }
+
+ public virtual DbSet FriendRequests { get; set; }
+
+ public virtual DbSet Groups { get; set; }
+
+ public virtual DbSet GroupInvites { get; set; }
+
+ public virtual DbSet GroupMembers { get; set; }
+
+ public virtual DbSet GroupRequests { get; set; }
+
+ public virtual DbSet LoginLogs { get; set; }
+
+ public virtual DbSet Messages { get; set; }
+
+ public virtual DbSet Notifications { get; set; }
+
+ public virtual DbSet Permissions { get; set; }
+
+ public virtual DbSet Permissionaroles { get; set; }
+
+ public virtual DbSet Roles { get; set; }
+
+ public virtual DbSet Users { get; set; }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
+ => optionsBuilder.UseMySql("server=frp-era.com;port=26582;database=IM;user=product;password=12345678", Microsoft.EntityFrameworkCore.ServerVersion.Parse("5.7.44-mysql"));
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder
+ .UseCollation("latin1_swedish_ci")
+ .HasCharSet("latin1");
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("admins")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.RoleId, "RoleId");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Password)
+ .HasMaxLength(50)
+ .HasComment("密码");
+ entity.Property(e => e.RoleId)
+ .HasComment("角色")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.State)
+ .HasComment("状态(0:正常,2:封禁) ")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Updated)
+ .HasComment("更新时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Username)
+ .HasMaxLength(50)
+ .HasComment("用户名");
+
+ entity.HasOne(d => d.Role).WithMany(p => p.Admins)
+ .HasForeignKey(d => d.RoleId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("admins_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("conversations")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.UserId, "Userid");
+
+ entity.HasIndex(e => e.LastMessageId, "lastMessageId");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.LastMessageId)
+ .HasComment("最后一条消息ID ")
+ .HasColumnType("int(11)")
+ .HasColumnName("lastMessageId");
+ entity.Property(e => e.MsgType)
+ .HasComment("消息类型(同Messages.MsgType) ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.TargetId)
+ .HasComment("对方ID(群聊为群聊ID,单聊为单聊ID) ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.UnreadCount)
+ .HasComment("未读消息数 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.UserId)
+ .HasComment("用户")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.LastMessage).WithMany(p => p.Conversations)
+ .HasForeignKey(d => d.LastMessageId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("conversations_ibfk_2");
+
+ entity.HasOne(d => d.User).WithMany(p => p.Conversations)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("conversations_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("devices")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.UserId, "Userid");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Dtype)
+ .HasComment("设备类型(\r\n0:Android,1:Ios,2:PC,3:Pad,4:未知)")
+ .HasColumnType("tinyint(4)")
+ .HasColumnName("DType");
+ entity.Property(e => e.LastLogin)
+ .HasComment("最后一次登录 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.UserId)
+ .HasComment("设备所属用户 ")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.User).WithMany(p => p.Devices)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("devices_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("files")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.MessageId, "Messageld");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.MessageId)
+ .HasComment("关联消息ID ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Name)
+ .HasMaxLength(50)
+ .HasComment("文件名 ");
+ entity.Property(e => e.Size)
+ .HasComment("文件大小(单位:KB) ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Type)
+ .HasMaxLength(10)
+ .HasComment("文件类型 ");
+ entity.Property(e => e.Url)
+ .HasMaxLength(100)
+ .HasComment("文件储存URL ")
+ .HasColumnName("URL");
+
+ entity.HasOne(d => d.Message).WithMany(p => p.Files)
+ .HasForeignKey(d => d.MessageId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("files_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("friends")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.Id, "ID");
+
+ entity.HasIndex(e => new { e.UserId, e.FriendId }, "Userld");
+
+ entity.HasIndex(e => e.FriendId, "用户2id");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("好友关系创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.FriendId)
+ .HasComment("用户2ID")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Status)
+ .HasComment("当前好友关系状态\r\n(0:待通过,1:已添加,2:已拒绝,3:已拉黑)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.UserId)
+ .HasComment("用户ID")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.FriendNavigation).WithMany(p => p.FriendFriendNavigations)
+ .HasForeignKey(d => d.FriendId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("用户2id");
+
+ entity.HasOne(d => d.User).WithMany(p => p.FriendUsers)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("用户id");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("friend_request")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.RequestUser, "RequestUser");
+
+ entity.HasIndex(e => e.ResponseUser, "ResponseUser");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("申请时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Description)
+ .HasComment("申请附言 ")
+ .HasColumnType("text");
+ entity.Property(e => e.RequestUser)
+ .HasComment("申请人 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.ResponseUser)
+ .HasComment("被申请人 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.State)
+ .HasComment("申请状态(0:待通过,1:拒绝,2:同意,3:拉黑) ")
+ .HasColumnType("tinyint(4)");
+
+ entity.HasOne(d => d.RequestUserNavigation).WithMany(p => p.FriendRequestRequestUserNavigations)
+ .HasForeignKey(d => d.RequestUser)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("friend_request_ibfk_1");
+
+ entity.HasOne(d => d.ResponseUserNavigation).WithMany(p => p.FriendRequestResponseUserNavigations)
+ .HasForeignKey(d => d.ResponseUser)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("friend_request_ibfk_2");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("groups")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.GroupMaster, "GroupMaster");
+
+ entity.HasIndex(e => e.Id, "ID");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.AllMembersBanned)
+ .HasComment("全员禁言(0允许发言,2全员禁言)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Announcement)
+ .HasComment("群公告")
+ .HasColumnType("text");
+ entity.Property(e => e.Auhority)
+ .HasComment("群权限\r\n(0:需管理员同意,1:任意人可加群,2:不允许任何人加入)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Created)
+ .HasComment("群聊创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.GroupMaster)
+ .HasComment("群主")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Name)
+ .HasMaxLength(20)
+ .HasComment("群聊名称");
+ entity.Property(e => e.Status)
+ .HasComment("群聊状态\r\n(1:正常,2:封禁)")
+ .HasColumnType("tinyint(4)");
+
+ entity.HasOne(d => d.GroupMasterNavigation).WithMany(p => p.Groups)
+ .HasForeignKey(d => d.GroupMaster)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("groups_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("group_invite")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.GroupId, "GroupId");
+
+ entity.HasIndex(e => e.InviteUser, "InviteUser");
+
+ entity.HasIndex(e => e.InvitedUser, "InvitedUser");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.GroupId)
+ .HasComment("群聊编号")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.InviteUser)
+ .HasComment("邀请用户")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.InvitedUser)
+ .HasComment("被邀请用户")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.State)
+ .HasComment("当前状态(0:待被邀请人同意\r\n1:被邀请人已同意)")
+ .HasColumnType("tinyint(4)");
+
+ entity.HasOne(d => d.Group).WithMany(p => p.GroupInvites)
+ .HasForeignKey(d => d.GroupId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("group_invite_ibfk_2");
+
+ entity.HasOne(d => d.InviteUserNavigation).WithMany(p => p.GroupInviteInviteUserNavigations)
+ .HasForeignKey(d => d.InviteUser)
+ .HasConstraintName("group_invite_ibfk_1");
+
+ entity.HasOne(d => d.InvitedUserNavigation).WithMany(p => p.GroupInviteInvitedUserNavigations)
+ .HasForeignKey(d => d.InvitedUser)
+ .HasConstraintName("group_invite_ibfk_3");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("group_member")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.GroupId, "Groupld");
+
+ entity.HasIndex(e => e.Id, "ID");
+
+ entity.HasIndex(e => e.UserId, "Userld");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasDefaultValueSql("'1970-01-01 00:00:00'")
+ .HasComment("加入群聊时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.GroupId)
+ .HasComment("群聊编号")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Role)
+ .HasComment("成员角色(0:普通成员,1:管理员,2:群主)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.UserId)
+ .HasComment("用户编号")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.Group).WithMany(p => p.GroupMemberGroups)
+ .HasForeignKey(d => d.GroupId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("group_member_ibfk_2");
+
+ entity.HasOne(d => d.User).WithMany(p => p.GroupMemberUsers)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("group_member_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("group_request")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.GroupId, "GroupId");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Description)
+ .HasComment("入群附言")
+ .HasColumnType("text");
+ entity.Property(e => e.GroupId)
+ .HasComment("群聊编号\r\n")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.State)
+ .HasComment("申请状态(0:待管理员同意,1:已拒绝,2:已同意)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.UserId)
+ .HasComment("申请人 ")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.Group).WithMany(p => p.GroupRequests)
+ .HasForeignKey(d => d.GroupId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("group_request_ibfk_1");
+
+ entity.HasOne(d => d.GroupNavigation).WithMany(p => p.GroupRequests)
+ .HasForeignKey(d => d.GroupId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("group_request_ibfk_2");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("login_log")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.UserId, "Userld");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Dtype)
+ .HasComment("设备类型(通Devices/DType) ")
+ .HasColumnType("tinyint(4)")
+ .HasColumnName("DType");
+ entity.Property(e => e.Logined)
+ .HasComment("登录时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.State)
+ .HasComment("登录状态(0:登陆成功,1:未验证,2:已被拒绝) ")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.UserId)
+ .HasComment("登录用户 ")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.User).WithMany(p => p.LoginLogs)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("login_log_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("messages")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.Sender, "Sender");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.ChatType)
+ .HasComment("聊天类型\r\n(0:私聊,1:群聊)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Content)
+ .HasComment("消息内容 ")
+ .HasColumnType("text");
+ entity.Property(e => e.Created)
+ .HasComment("发送时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.MsgType)
+ .HasComment("消息类型\r\n(0:文本,1:图片,2:语音,3:视频,4:文件,5:语音聊天,6:视频聊天)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Recipient)
+ .HasComment("接收者(私聊为用户ID,群聊为群聊ID) ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Sender)
+ .HasComment("发送者 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.State)
+ .HasComment("消息状态(0:已发送,1:已撤回) ")
+ .HasColumnType("tinyint(4)");
+
+ entity.HasOne(d => d.SenderNavigation).WithMany(p => p.Messages)
+ .HasForeignKey(d => d.Sender)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("messages_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("notifications")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.UserId, "Userld");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Content)
+ .HasComment("通知内容")
+ .HasColumnType("text");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Ntype)
+ .HasComment("通知类型(0:文本)")
+ .HasColumnType("tinyint(4)")
+ .HasColumnName("NType");
+ entity.Property(e => e.Title)
+ .HasMaxLength(40)
+ .HasComment("通知标题");
+ entity.Property(e => e.UserId)
+ .HasComment("接收人(为空为全体通知)")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.User).WithMany(p => p.Notifications)
+ .HasForeignKey(d => d.UserId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("notifications_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("permissions")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Code)
+ .HasComment("权限编码 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Name)
+ .HasMaxLength(50)
+ .HasComment("权限名称 ");
+ entity.Property(e => e.Ptype)
+ .HasComment("权限类型(0:增,1:删,2:改,3:查) ")
+ .HasColumnType("int(11)")
+ .HasColumnName("PType");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("permissionarole")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.PermissionId, "Permissionld");
+
+ entity.HasIndex(e => e.RoleId, "Roleld");
+
+ entity.Property(e => e.Id)
+ .ValueGeneratedNever()
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.PermissionId)
+ .HasComment("权限 ")
+ .HasColumnType("int(11)");
+ entity.Property(e => e.RoleId)
+ .HasComment("角色 ")
+ .HasColumnType("int(11)");
+
+ entity.HasOne(d => d.Permission).WithMany(p => p.Permissionaroles)
+ .HasForeignKey(d => d.PermissionId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("permissionarole_ibfk_2");
+
+ entity.HasOne(d => d.Role).WithMany(p => p.Permissionaroles)
+ .HasForeignKey(d => d.RoleId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("permissionarole_ibfk_1");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("roles")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasComment("创建时间 ")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Description)
+ .HasComment("角色描述 ")
+ .HasColumnType("text");
+ entity.Property(e => e.Name)
+ .HasMaxLength(20)
+ .HasComment("角色名称 ");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity
+ .ToTable("users")
+ .HasCharSet("utf8mb4")
+ .UseCollation("utf8mb4_general_ci");
+
+ entity.HasIndex(e => e.Id, "ID");
+
+ entity.HasIndex(e => e.Username, "Username").IsUnique();
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("ID");
+ entity.Property(e => e.Created)
+ .HasDefaultValueSql("'1970-01-01 00:00:00'")
+ .HasComment("创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.IsDeleted)
+ .HasComment("软删除标识\r\n0:账号正常\r\n1:账号已删除")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.NickName)
+ .HasMaxLength(50)
+ .HasComment("用户昵称");
+ entity.Property(e => e.OnlineStatus)
+ .HasComment("用户在线状态\r\n0(默认):不在线\r\n1:在线")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Password)
+ .HasMaxLength(50)
+ .HasComment("密码");
+ entity.Property(e => e.Status)
+ .HasDefaultValueSql("'1'")
+ .HasComment("账户状态\r\n(0:未激活,1:正常,2:封禁)")
+ .HasColumnType("tinyint(4)");
+ entity.Property(e => e.Updated)
+ .HasComment("修改时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.Username)
+ .HasMaxLength(50)
+ .HasComment("唯一用户名");
+ });
+
+ OnModelCreatingPartial(modelBuilder);
+ }
+
+ partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}
diff --git a/backend/IM_API/Models/LoginLog.cs b/backend/IM_API/Models/LoginLog.cs
index 7650ca8..2a3d602 100644
--- a/backend/IM_API/Models/LoginLog.cs
+++ b/backend/IM_API/Models/LoginLog.cs
@@ -1,46 +1,31 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("login_log")]
-[Index("Userld", Name = "Userld")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class LoginLog
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 设备类型(通Devices/DType)
///
- [Column("DType", TypeName = "tinyint(4)")]
public sbyte Dtype { get; set; }
///
/// 登录时间
///
- [Column(TypeName = "datetime")]
public DateTime Logined { get; set; }
///
/// 登录用户
///
- [Column(TypeName = "int(11)")]
- public int Userld { get; set; }
+ public int UserId { get; set; }
///
/// 登录状态(0:登陆成功,1:未验证,2:已被拒绝)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte State { get; set; }
- [ForeignKey("Userld")]
- [InverseProperty("LoginLogs")]
- public virtual User UserldNavigation { get; set; } = null!;
+ public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/LoginLogExt.cs b/backend/IM_API/Models/LoginLogExt.cs
new file mode 100644
index 0000000..333a76a
--- /dev/null
+++ b/backend/IM_API/Models/LoginLogExt.cs
@@ -0,0 +1,11 @@
+namespace IM_API.Models
+{
+ public partial class LoginLog
+ {
+ public LoginState StateEnum
+ {
+ get => (LoginState)State;
+ set => State = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/LoginState.cs b/backend/IM_API/Models/LoginState.cs
new file mode 100644
index 0000000..e2e32d4
--- /dev/null
+++ b/backend/IM_API/Models/LoginState.cs
@@ -0,0 +1,18 @@
+namespace IM_API.Models
+{
+ public enum LoginState
+ {
+ ///
+ /// 登陆成功
+ ///
+ Success = 0,
+ ///
+ /// 未验证
+ ///
+ Unauthenticated = 1,
+ ///
+ /// 已拒绝
+ ///
+ Declined = 2
+ }
+}
diff --git a/backend/IM_API/Models/Message.cs b/backend/IM_API/Models/Message.cs
index 595174f..312f075 100644
--- a/backend/IM_API/Models/Message.cs
+++ b/backend/IM_API/Models/Message.cs
@@ -1,72 +1,52 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("messages")]
-[Index("Sender", Name = "Sender")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Message
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 聊天类型
/// (0:私聊,1:群聊)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte ChatType { get; set; }
///
/// 消息类型
/// (0:文本,1:图片,2:语音,3:视频,4:文件,5:语音聊天,6:视频聊天)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte MsgType { get; set; }
///
/// 消息内容
///
- [Column(TypeName = "text")]
public string Content { get; set; } = null!;
///
/// 发送者
///
- [Column(TypeName = "int(11)")]
public int Sender { get; set; }
///
/// 接收者(私聊为用户ID,群聊为群聊ID)
///
- [Column(TypeName = "int(11)")]
public int Recipient { get; set; }
///
/// 消息状态(0:已发送,1:已撤回)
///
- [Column(TypeName = "tinyint(4)")]
public sbyte State { get; set; }
///
/// 发送时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [InverseProperty("LastMessage")]
public virtual ICollection Conversations { get; set; } = new List();
- [InverseProperty("MessageldNavigation")]
public virtual ICollection Files { get; set; } = new List();
- [ForeignKey("Sender")]
- [InverseProperty("Messages")]
public virtual User SenderNavigation { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/MessageExt.cs b/backend/IM_API/Models/MessageExt.cs
new file mode 100644
index 0000000..cbf7578
--- /dev/null
+++ b/backend/IM_API/Models/MessageExt.cs
@@ -0,0 +1,16 @@
+namespace IM_API.Models
+{
+ public partial class Message
+ {
+ public MessageMsgType MsgTypeEnum
+ {
+ get => (MessageMsgType)MsgType;
+ set => MsgType = (sbyte) value;
+ }
+ public MessageState StateEnum
+ {
+ get => (MessageState)State;
+ set => State = (sbyte) value;
+ }
+ }
+}
diff --git a/backend/IM_API/Models/MessageMsgType.cs b/backend/IM_API/Models/MessageMsgType.cs
new file mode 100644
index 0000000..a02832b
--- /dev/null
+++ b/backend/IM_API/Models/MessageMsgType.cs
@@ -0,0 +1,13 @@
+namespace IM_API.Models
+{
+ public enum MessageMsgType
+ {
+ Text = 0,
+ Image = 1,
+ Voice = 2,
+ Video = 3,
+ File = 4,
+ VoiceChat = 5,
+ VideoChat = 6
+ }
+}
diff --git a/backend/IM_API/Models/MessageState.cs b/backend/IM_API/Models/MessageState.cs
new file mode 100644
index 0000000..8d75248
--- /dev/null
+++ b/backend/IM_API/Models/MessageState.cs
@@ -0,0 +1,14 @@
+namespace IM_API.Models
+{
+ public enum MessageState
+ {
+ ///
+ /// 已发送
+ ///
+ Sent = 0,
+ ///
+ /// 已撤回
+ ///
+ Withdrwan = 1
+ }
+}
diff --git a/backend/IM_API/Models/Notification.cs b/backend/IM_API/Models/Notification.cs
index a277bb2..3273398 100644
--- a/backend/IM_API/Models/Notification.cs
+++ b/backend/IM_API/Models/Notification.cs
@@ -1,52 +1,36 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("notifications")]
-[Index("Userld", Name = "Userld")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Notification
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 接收人(为空为全体通知)
///
- [Column(TypeName = "int(11)")]
- public int Userld { get; set; }
+ public int UserId { get; set; }
///
/// 通知类型(0:文本)
///
- [Column("NType", TypeName = "tinyint(4)")]
public sbyte Ntype { get; set; }
///
/// 通知标题
///
- [StringLength(40)]
public string Title { get; set; } = null!;
///
/// 通知内容
///
- [Column(TypeName = "text")]
public string Content { get; set; } = null!;
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [ForeignKey("Userld")]
- [InverseProperty("Notifications")]
- public virtual User UserldNavigation { get; set; } = null!;
+ public virtual User User { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Permission.cs b/backend/IM_API/Models/Permission.cs
index 3dc4f9c..d8ecfc7 100644
--- a/backend/IM_API/Models/Permission.cs
+++ b/backend/IM_API/Models/Permission.cs
@@ -1,44 +1,31 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("permissions")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Permission
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 权限类型(0:增,1:删,2:改,3:查)
///
- [Column("PType", TypeName = "int(11)")]
public int Ptype { get; set; }
///
/// 权限名称
///
- [StringLength(50)]
public string Name { get; set; } = null!;
///
/// 权限编码
///
- [Column(TypeName = "int(11)")]
public int Code { get; set; }
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [InverseProperty("PermissionldNavigation")]
public virtual ICollection Permissionaroles { get; set; } = new List();
}
diff --git a/backend/IM_API/Models/Permissionarole.cs b/backend/IM_API/Models/Permissionarole.cs
index ec70572..7ea65cb 100644
--- a/backend/IM_API/Models/Permissionarole.cs
+++ b/backend/IM_API/Models/Permissionarole.cs
@@ -1,39 +1,23 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("permissionarole")]
-[Index("Permissionld", Name = "Permissionld")]
-[Index("Roleld", Name = "Roleld")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Permissionarole
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 角色
///
- [Column(TypeName = "int(11)")]
- public int Roleld { get; set; }
+ public int RoleId { get; set; }
///
/// 权限
///
- [Column(TypeName = "int(11)")]
- public int Permissionld { get; set; }
+ public int PermissionId { get; set; }
- [ForeignKey("Permissionld")]
- [InverseProperty("Permissionaroles")]
- public virtual Permission PermissionldNavigation { get; set; } = null!;
+ public virtual Permission Permission { get; set; } = null!;
- [ForeignKey("Roleld")]
- [InverseProperty("Permissionaroles")]
- public virtual Role RoleldNavigation { get; set; } = null!;
+ public virtual Role Role { get; set; } = null!;
}
diff --git a/backend/IM_API/Models/Role.cs b/backend/IM_API/Models/Role.cs
index 3c6b9f3..25490ff 100644
--- a/backend/IM_API/Models/Role.cs
+++ b/backend/IM_API/Models/Role.cs
@@ -1,41 +1,28 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("roles")]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class Role
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 角色名称
///
- [StringLength(20)]
public string Name { get; set; } = null!;
///
/// 角色描述
///
- [Column(TypeName = "text")]
public string Description { get; set; } = null!;
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
- [InverseProperty("Role")]
public virtual ICollection Admins { get; set; } = new List();
- [InverseProperty("RoleldNavigation")]
public virtual ICollection Permissionaroles { get; set; } = new List();
}
diff --git a/backend/IM_API/Models/User.cs b/backend/IM_API/Models/User.cs
index b1639a3..97a63c5 100644
--- a/backend/IM_API/Models/User.cs
+++ b/backend/IM_API/Models/User.cs
@@ -1,38 +1,25 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace IM_API.Models;
-[Table("users")]
-[Index("Id", Name = "ID")]
-[Index("Username", Name = "Username", IsUnique = true)]
-[MySqlCharSet("utf8mb4")]
-[MySqlCollation("utf8mb4_general_ci")]
public partial class User
{
- [Key]
- [Column("ID", TypeName = "int(11)")]
public int Id { get; set; }
///
/// 唯一用户名
///
- [StringLength(50)]
public string Username { get; set; } = null!;
///
/// 密码
///
- [StringLength(50)]
public string Password { get; set; } = null!;
///
/// 用户昵称
///
- [StringLength(50)]
public string NickName { get; set; } = null!;
///
@@ -40,78 +27,58 @@ public partial class User
/// 0(默认):不在线
/// 1:在线
///
- [Column(TypeName = "tinyint(4)")]
- public UserOnlineStatus OlineStatus { get; set; }
+ public sbyte OnlineStatus { get; set; }
///
/// 创建时间
///
- [Column(TypeName = "datetime")]
public DateTime Created { get; set; }
///
/// 修改时间
///
- [Column(TypeName = "datetime")]
public DateTime? Updated { get; set; }
///
/// 账户状态
/// (0:未激活,1:正常,2:封禁)
///
- [Column(TypeName = "tinyint(4)")]
- public UserStatus Status { get; set; }
+ public sbyte Status { get; set; }
///
/// 软删除标识
/// 0:账号正常
/// 1:账号已删除
///
- [Column(TypeName = "tinyint(4)")]
public sbyte IsDeleted { get; set; }
- [InverseProperty("User")]
public virtual ICollection Conversations { get; set; } = new List();
- [InverseProperty("User")]
public virtual ICollection Devices { get; set; } = new List();
- [InverseProperty("FriendldNavigation")]
- public virtual ICollection FriendFriendldNavigations { get; set; } = new List();
+ public virtual ICollection FriendFriendNavigations { get; set; } = new List();
- [InverseProperty("UserldNavigation")]
- public virtual ICollection FriendUserldNavigations { get; set; } = new List();
+ public virtual ICollection FriendRequestRequestUserNavigations { get; set; } = new List();
- [InverseProperty("RequestUserNavigation")]
- public virtual ICollection FriendrequestRequestUserNavigations { get; set; } = new List();
+ public virtual ICollection FriendRequestResponseUserNavigations { get; set; } = new List();
- [InverseProperty("ResponseUserNavigation")]
- public virtual ICollection FriendrequestResponseUserNavigations { get; set; } = new List();
+ public virtual ICollection FriendUsers { get; set; } = new List();
- [InverseProperty("InviteUserNavigation")]
- public virtual ICollection GroupinviteInviteUserNavigations { get; set; } = new List();
+ public virtual ICollection GroupInviteInviteUserNavigations { get; set; } = new List();
- [InverseProperty("InvitedUserNavigation")]
- public virtual ICollection GroupinviteInvitedUserNavigations { get; set; } = new List();
+ public virtual ICollection GroupInviteInvitedUserNavigations { get; set; } = new List();
- [InverseProperty("GroupldNavigation")]
- public virtual ICollection GroupmemberGroupldNavigations { get; set; } = new List();
+ public virtual ICollection GroupMemberGroups { get; set; } = new List();
- [InverseProperty("UserldNavigation")]
- public virtual ICollection GroupmemberUserldNavigations { get; set; } = new List();
+ public virtual ICollection GroupMemberUsers { get; set; } = new List();
- [InverseProperty("GroupNavigation")]
- public virtual ICollection Grouprequests { get; set; } = new List();
+ public virtual ICollection GroupRequests { get; set; } = new List();
- [InverseProperty("GroupMasterNavigation")]
public virtual ICollection Groups { get; set; } = new List();
- [InverseProperty("UserldNavigation")]
public virtual ICollection LoginLogs { get; set; } = new List();
- [InverseProperty("SenderNavigation")]
public virtual ICollection Messages { get; set; } = new List();
- [InverseProperty("UserldNavigation")]
public virtual ICollection Notifications { get; set; } = new List();
}
diff --git a/backend/IM_API/Models/UserExt.cs b/backend/IM_API/Models/UserExt.cs
new file mode 100644
index 0000000..2ef533a
--- /dev/null
+++ b/backend/IM_API/Models/UserExt.cs
@@ -0,0 +1,16 @@
+namespace IM_API.Models
+{
+ public partial class User
+ {
+ public UserOnlineStatus OnlineStatusEnum
+ {
+ get => (UserOnlineStatus)OnlineStatus;
+ set => OnlineStatus = (sbyte)value;
+ }
+ public UserStatus StatusEnum
+ {
+ get => (UserStatus)Status;
+ set => Status = (sbyte)value;
+ }
+ }
+}
diff --git a/backend/IM_API/Program.cs b/backend/IM_API/Program.cs
index e906aee..2ac6eae 100644
--- a/backend/IM_API/Program.cs
+++ b/backend/IM_API/Program.cs
@@ -17,11 +17,12 @@ namespace IM_API
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
string conStr = builder.Configuration.GetConnectionString("DefaultConnection")!;
-
- builder.Services.AddDbContext(options =>
+
+ builder.Services.AddDbContext(options =>
{
options.UseMySql(conStr,ServerVersion.AutoDetect(conStr));
});
+
builder.Services.AddAllService(configuration);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
diff --git a/backend/IM_API/Services/FriendService.cs b/backend/IM_API/Services/FriendService.cs
new file mode 100644
index 0000000..82cb9a1
--- /dev/null
+++ b/backend/IM_API/Services/FriendService.cs
@@ -0,0 +1,6 @@
+namespace IM_API.Services
+{
+ public class FriendService
+ {
+ }
+}
diff --git a/backend/IM_API/Tools/PasswordHasher.cs b/backend/IM_API/Tools/PasswordHasher.cs
index b567cc4..3431848 100644
--- a/backend/IM_API/Tools/PasswordHasher.cs
+++ b/backend/IM_API/Tools/PasswordHasher.cs
@@ -19,4 +19,3 @@ namespace IM_API.Tools
}
}
}
-}