using MessagePack; namespace WebAppServer1.Models { // 用户表 public class User { public int Id { get; set; } public string Username { get; set; } = string.Empty; public string Nickname { get; set; } = string.Empty; // 可修改,不唯一 public string Email { get; set; } = string.Empty; public string PasswordHash { get; set; } = string.Empty; public string AvatarUrl { get; set; } = string.Empty; public string Signature { get; set; } = string.Empty; public DateTime LastActive { get; set; } public DateTime CreatedAt { get; set; } public bool IsOnline { get; set; } public ICollection Friends { get; set; } = new List(); public ICollection Messages { get; set; } = new List(); } // 好友关系表 public class Friend { public int Id { get; set; } public int UserId { get; set; } public int FriendId { get; set; } public FriendStatus Status { get; set; } public DateTime CreatedAt { get; set; } public User User { get; set; } public User FriendUser { get; set; } } public enum FriendStatus { Pending, Accepted, Blocked } // 群聊表 public class Group { public int Id { get; set; } public string Name { get; set; } = string.Empty; public int OwnerId { get; set; } public string AvatarUrl { get; set; } = string.Empty; public DateTime CreatedAt { get; set; } public User Owner { get; set; } public ICollection Members { get; set; } = new List(); } // 群成员表 public class GroupMember { public int Id { get; set; } public int GroupId { get; set; } public int UserId { get; set; } public GroupRole Role { get; set; } public DateTime JoinedAt { get; set; } public Group Group { get; set; } public User User { get; set; } } public enum GroupRole { Member, Admin, Owner } // 消息表 public class Message { public int Id { get; set; } public int SenderId { get; set; } public int? ReceiverId { get; set; } // 私聊 public int? GroupId { get; set; } // 群聊 public string Content { get; set; } = string.Empty; public MessageType MessageType { get; set; } public DateTime CreatedAt { get; set; } public bool IsRead { get; set; } public bool IsDeleted { get; set; } public User Sender { get; set; } public User Receiver { get; set; } public Group Group { get; set; } } public enum MessageType { Text, Image, File, Video, Voice } // 通知表 public class Notification { public int Id { get; set; } public int UserId { get; set; } public NotificationType Type { get; set; } public string Content { get; set; } = string.Empty; public bool IsRead { get; set; } public DateTime CreatedAt { get; set; } public User User { get; set; } } public enum NotificationType { FriendRequest, Message, System } // 文件表 public class FileEntity { public int Id { get; set; } public int UploaderId { get; set; } public int MessageId { get; set; } public string FileUrl { get; set; } = string.Empty; public FileType FileType { get; set; } public int Size { get; set; } public DateTime UploadedAt { get; set; } public User Uploader { get; set; } public Message Message { get; set; } } public enum FileType { Image, Video, Document, Audio } public class UserProfileHistory { public int Id { get; set; } public int UserId { get; set; } public string FieldName { get; set; } = string.Empty; public string OldValue { get; set; } = string.Empty; public string NewValue { get; set; } = string.Empty; public DateTime ChangedAt { get; set; } public string ChangedBy { get; set; } = string.Empty; public User User { get; set; } } public class LoginRecord { public int Id { get; set; } public int UserId { get; set; } public DateTime LoginTime { get; set; } public string IpAddress { get; set; } = string.Empty; public string DeviceInfo { get; set; } = string.Empty; public bool IsSuccess { get; set; } public User User { get; set; } } }