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 } } } -}