namespace XFEToolBox.Core.Chat;
public enum ChatFriendRequestStatus
{
Pending = 0,
Accepted = 1,
Rejected = 2,
Cancelled = 3
}
public enum ChatGroupVisibility
{
Private = 0,
Public = 1
}
public enum ChatGroupRole
{
Member = 10,
Administrator = 50,
Owner = 100
}
public enum ChatGroupInvitationStatus
{
Pending = 0,
Accepted = 1,
Rejected = 2,
Cancelled = 3,
Expired = 4
}
public enum ChatConversationKind
{
Direct = 0,
Group = 1
}
public enum ChatMessageType
{
Text = 0,
Image = 1,
Video = 2,
File = 3,
System = 10,
GroupInvitation = 11
}
public enum ChatAttachmentStatus
{
Uploading = 0,
Complete = 1,
Rejected = 2
}
public sealed class ChatUserSummary
{
public string Id { get; init; } = string.Empty;
public string UserName { get; init; } = string.Empty;
public string NickName { get; init; } = string.Empty;
public string Bio { get; init; } = string.Empty;
}
public sealed class ChatFriendInfo
{
public ChatUserSummary User { get; init; } = new();
public DateTimeOffset FriendsSinceUtc { get; init; }
public string ConversationId { get; init; } = string.Empty;
}
public sealed class ChatFriendRequestInfo
{
public string Id { get; init; } = string.Empty;
public ChatUserSummary FromUser { get; init; } = new();
public ChatUserSummary ToUser { get; init; } = new();
public ChatFriendRequestStatus Status { get; init; }
public string Message { get; init; } = string.Empty;
public bool IsIncoming { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? RespondedAtUtc { get; init; }
}
public sealed class ChatGroupSummary
{
public string Id { get; init; } = string.Empty;
public string GroupNumber { get; init; } = string.Empty;
public string Name { get; init; } = string.Empty;
public string Description { get; init; } = string.Empty;
public string AvatarUrl { get; init; } = string.Empty;
public ChatGroupVisibility Visibility { get; init; }
public string OwnerUserId { get; init; } = string.Empty;
public int MemberCount { get; init; }
public ChatGroupRole? CurrentUserRole { get; init; }
public string ConversationId { get; init; } = string.Empty;
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset UpdatedAtUtc { get; init; }
}
public sealed class ChatGroupMemberInfo
{
public string GroupId { get; init; } = string.Empty;
public ChatUserSummary User { get; init; } = new();
public ChatGroupRole Role { get; init; }
public DateTimeOffset JoinedAtUtc { get; init; }
}
public sealed class ChatGroupInvitationInfo
{
public string Id { get; init; } = string.Empty;
public ChatGroupSummary Group { get; init; } = new();
public ChatUserSummary InvitedBy { get; init; } = new();
public ChatUserSummary InvitedUser { get; init; } = new();
public ChatGroupInvitationStatus Status { get; init; }
public string Message { get; init; } = string.Empty;
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset ExpiresAtUtc { get; init; }
public DateTimeOffset? RespondedAtUtc { get; init; }
}
public sealed class ChatAttachmentInfo
{
public string Id { get; init; } = string.Empty;
public string OwnerUserId { get; init; } = string.Empty;
public string FileName { get; init; } = string.Empty;
public string ContentType { get; init; } = "application/octet-stream";
public long TotalBytes { get; init; }
public long UploadedBytes { get; init; }
public string Sha256 { get; init; } = string.Empty;
public ChatAttachmentStatus Status { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? CompletedAtUtc { get; init; }
}
public sealed class ChatAttachmentChunkInfo
{
public string AttachmentId { get; init; } = string.Empty;
public long Offset { get; init; }
public long TotalBytes { get; init; }
public string DataBase64 { get; init; } = string.Empty;
public bool EndOfFile { get; init; }
}
public sealed class ChatMessageInfo
{
public string Id { get; init; } = string.Empty;
public string ConversationId { get; init; } = string.Empty;
public long Sequence { get; init; }
public ChatUserSummary Sender { get; init; } = new();
public ChatMessageType MessageType { get; init; }
public string Text { get; init; } = string.Empty;
public ChatAttachmentInfo? Attachment { get; init; }
public ChatGroupInvitationInfo? GroupInvitation { get; init; }
public string ClientMessageId { get; init; } = string.Empty;
public string? ReplyToMessageId { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? EditedAtUtc { get; init; }
}
public sealed class ChatMessagePage
{
public ChatMessageInfo[] Items { get; init; } = [];
public long? NextBeforeSequence { get; init; }
public bool HasMore { get; init; }
}
public sealed class ChatConversationInfo
{
public string Id { get; init; } = string.Empty;
public ChatConversationKind Kind { get; init; }
public ChatUserSummary? Friend { get; init; }
public ChatGroupSummary? Group { get; init; }
public ChatMessageInfo? LastMessage { get; init; }
public long UnreadCount { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset UpdatedAtUtc { get; init; }
}
namespace XFEToolBox.Core.Chat;
public enum ChatFriendRequestStatus
{
Pending = 0,
Accepted = 1,
Rejected = 2,
Cancelled = 3
}
public enum ChatGroupVisibility
{
Private = 0,
Public = 1
}
public enum ChatGroupRole
{
Member = 10,
Administrator = 50,
Owner = 100
}
public enum ChatGroupInvitationStatus
{
Pending = 0,
Accepted = 1,
Rejected = 2,
Cancelled = 3,
Expired = 4
}
public enum ChatConversationKind
{
Direct = 0,
Group = 1
}
public enum ChatMessageType
{
Text = 0,
Image = 1,
Video = 2,
File = 3,
System = 10,
GroupInvitation = 11
}
public enum ChatAttachmentStatus
{
Uploading = 0,
Complete = 1,
Rejected = 2
}
public sealed class ChatUserSummary
{
public string Id { get; init; } = string.Empty;
public string UserName { get; init; } = string.Empty;
public string NickName { get; init; } = string.Empty;
public string Bio { get; init; } = string.Empty;
}
public sealed class ChatFriendInfo
{
public ChatUserSummary User { get; init; } = new();
public DateTimeOffset FriendsSinceUtc { get; init; }
public string ConversationId { get; init; } = string.Empty;
}
public sealed class ChatFriendRequestInfo
{
public string Id { get; init; } = string.Empty;
public ChatUserSummary FromUser { get; init; } = new();
public ChatUserSummary ToUser { get; init; } = new();
public ChatFriendRequestStatus Status { get; init; }
public string Message { get; init; } = string.Empty;
public bool IsIncoming { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? RespondedAtUtc { get; init; }
}
public sealed class ChatGroupSummary
{
public string Id { get; init; } = string.Empty;
public string GroupNumber { get; init; } = string.Empty;
public string Name { get; init; } = string.Empty;
public string Description { get; init; } = string.Empty;
public string AvatarUrl { get; init; } = string.Empty;
public ChatGroupVisibility Visibility { get; init; }
public string OwnerUserId { get; init; } = string.Empty;
public int MemberCount { get; init; }
public ChatGroupRole? CurrentUserRole { get; init; }
public string ConversationId { get; init; } = string.Empty;
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset UpdatedAtUtc { get; init; }
}
public sealed class ChatGroupMemberInfo
{
public string GroupId { get; init; } = string.Empty;
public ChatUserSummary User { get; init; } = new();
public ChatGroupRole Role { get; init; }
public DateTimeOffset JoinedAtUtc { get; init; }
}
public sealed class ChatGroupInvitationInfo
{
public string Id { get; init; } = string.Empty;
public ChatGroupSummary Group { get; init; } = new();
public ChatUserSummary InvitedBy { get; init; } = new();
public ChatUserSummary InvitedUser { get; init; } = new();
public ChatGroupInvitationStatus Status { get; init; }
public string Message { get; init; } = string.Empty;
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset ExpiresAtUtc { get; init; }
public DateTimeOffset? RespondedAtUtc { get; init; }
}
public sealed class ChatAttachmentInfo
{
public string Id { get; init; } = string.Empty;
public string OwnerUserId { get; init; } = string.Empty;
public string FileName { get; init; } = string.Empty;
public string ContentType { get; init; } = "application/octet-stream";
public long TotalBytes { get; init; }
public long UploadedBytes { get; init; }
public string Sha256 { get; init; } = string.Empty;
public ChatAttachmentStatus Status { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? CompletedAtUtc { get; init; }
}
public sealed class ChatAttachmentChunkInfo
{
public string AttachmentId { get; init; } = string.Empty;
public long Offset { get; init; }
public long TotalBytes { get; init; }
public string DataBase64 { get; init; } = string.Empty;
public bool EndOfFile { get; init; }
}
public sealed class ChatMessageInfo
{
public string Id { get; init; } = string.Empty;
public string ConversationId { get; init; } = string.Empty;
public long Sequence { get; init; }
public ChatUserSummary Sender { get; init; } = new();
public ChatMessageType MessageType { get; init; }
public string Text { get; init; } = string.Empty;
public ChatAttachmentInfo? Attachment { get; init; }
public ChatGroupInvitationInfo? GroupInvitation { get; init; }
public string ClientMessageId { get; init; } = string.Empty;
public string? ReplyToMessageId { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset? EditedAtUtc { get; init; }
}
public sealed class ChatMessagePage
{
public ChatMessageInfo[] Items { get; init; } = [];
public long? NextBeforeSequence { get; init; }
public bool HasMore { get; init; }
}
public sealed class ChatConversationInfo
{
public string Id { get; init; } = string.Empty;
public ChatConversationKind Kind { get; init; }
public ChatUserSummary? Friend { get; init; }
public ChatGroupSummary? Group { get; init; }
public ChatMessageInfo? LastMessage { get; init; }
public long UnreadCount { get; init; }
public DateTimeOffset CreatedAtUtc { get; init; }
public DateTimeOffset UpdatedAtUtc { get; init; }
}