Skip to content
Clone
eba4fd1
255 lines 8.5 KB Rust
use admin::services::chat::{
AdminChatAttachmentDto, AdminChatKindCount, AdminChatMessageDetail, AdminChatMessageDto,
AdminChatMessageEditDto, AdminChatReactionGroupDto, AdminChatRoomDetail,
AdminChatRoomMemberDto, AdminChatRoomSummary, AdminChatStatsDto, AdminChatThreadDto,
BulkChatMessageFailure, BulkDeleteChatMessagesResp, DeleteChatAttachmentResp,
DeleteChatRoomResp, PurgeChatMessagesResp, RemoveChatMemberResp,
};
use export::pagination::Page;
use crate::convert::{opt_ts, ts};
use crate::proto as pb;
pub fn kind_count(value: AdminChatKindCount) -> pb::AdminChatKindCount {
pb::AdminChatKindCount {
kind: value.kind,
count: value.count,
}
}
pub fn stats(value: AdminChatStatsDto) -> pb::AdminChatStats {
pb::AdminChatStats {
rooms: value.rooms,
active_rooms: value.active_rooms,
private_rooms: value.private_rooms,
kinds: value.kinds.into_iter().map(kind_count).collect(),
messages: value.messages,
deleted_messages: value.deleted_messages,
messages_24h: value.messages_24h,
threads: value.threads,
attachments: value.attachments,
attachment_bytes: value.attachment_bytes,
pending_attachments: value.pending_attachments,
members: value.members,
bans: value.bans,
}
}
pub fn room_summary(value: AdminChatRoomSummary) -> pb::AdminChatRoomSummary {
pb::AdminChatRoomSummary {
id: value.id.to_string(),
space_id: value.space_id.map(|value| value.to_string()),
space_name: value.space_name,
kind: value.kind,
name: value.name,
lower_name: value.lower_name,
topic: value.topic,
owner_id: value.owner_id.to_string(),
owner_username: value.owner_username,
is_private: value.is_private,
nsfw: value.nsfw,
is_active: value.is_active,
members: value.members,
messages: value.messages,
last_message_at: opt_ts(value.last_message_at),
created_at: ts(value.created_at),
updated_at: ts(value.updated_at),
}
}
pub fn room_page(value: Page<AdminChatRoomSummary>) -> pb::AdminChatRoomPage {
pb::AdminChatRoomPage {
items: value.items.into_iter().map(room_summary).collect(),
total: value.total,
limit: value.limit,
offset: value.offset,
}
}
pub fn room_detail(value: AdminChatRoomDetail) -> pb::AdminChatRoomDetail {
pb::AdminChatRoomDetail {
room: Some(room_summary(value.room)),
deleted_messages: value.deleted_messages,
threads: value.threads,
attachments: value.attachments,
attachment_bytes: value.attachment_bytes,
bans: value.bans,
invites: value.invites,
}
}
pub fn member(value: AdminChatRoomMemberDto) -> pb::AdminChatRoomMember {
pb::AdminChatRoomMember {
user_id: value.user_id.to_string(),
username: value.username,
display_name: value.display_name,
role: value.role,
nick: value.nick,
joined_at: ts(value.joined_at),
left_at: opt_ts(value.left_at),
}
}
pub fn member_page(value: Page<AdminChatRoomMemberDto>) -> pb::AdminChatRoomMemberPage {
pb::AdminChatRoomMemberPage {
items: value.items.into_iter().map(member).collect(),
total: value.total,
limit: value.limit,
offset: value.offset,
}
}
pub fn message(value: AdminChatMessageDto) -> pb::AdminChatMessage {
pb::AdminChatMessage {
id: value.id.to_string(),
room_id: value.room_id.to_string(),
room_name: value.room_name,
author_id: value.author_id.to_string(),
author_username: value.author_username,
author_display_name: value.author_display_name,
author_type: value.author_type,
message_type: value.message_type,
content: value.content,
seq: value.seq,
flags: value.flags,
pinned: value.pinned,
thread_id: value.thread_id.map(|value| value.to_string()),
reply_to_id: value.reply_to_id.map(|value| value.to_string()),
attachment_count: value.attachment_count,
reaction_count: value.reaction_count,
edited_at: opt_ts(value.edited_at),
deleted_at: opt_ts(value.deleted_at),
created_at: ts(value.created_at),
}
}
pub fn message_page(value: Page<AdminChatMessageDto>) -> pb::AdminChatMessagePage {
pb::AdminChatMessagePage {
items: value.items.into_iter().map(message).collect(),
total: value.total,
limit: value.limit,
offset: value.offset,
}
}
pub fn message_edit(value: AdminChatMessageEditDto) -> pb::AdminChatMessageEdit {
pb::AdminChatMessageEdit {
id: value.id.to_string(),
editor_id: value.editor_id.to_string(),
editor_username: value.editor_username,
content: value.content,
created_at: ts(value.created_at),
}
}
pub fn reaction_group(value: AdminChatReactionGroupDto) -> pb::AdminChatReactionGroup {
pb::AdminChatReactionGroup {
emoji: value.emoji,
count: value.count,
}
}
pub fn attachment(value: AdminChatAttachmentDto) -> pb::AdminChatAttachment {
pb::AdminChatAttachment {
id: value.id.to_string(),
user_id: value.user_id.to_string(),
username: value.username,
display_name: value.display_name,
room_id: value.room_id.map(|value| value.to_string()),
message_id: value.message_id.map(|value| value.to_string()),
filename: value.filename,
description: value.description,
content_type: value.content_type,
size: value.size,
bucket: value.bucket,
s3_key: value.s3_key,
status: value.status,
created_at: ts(value.created_at),
}
}
pub fn attachment_page(value: Page<AdminChatAttachmentDto>) -> pb::AdminChatAttachmentPage {
pb::AdminChatAttachmentPage {
items: value.items.into_iter().map(attachment).collect(),
total: value.total,
limit: value.limit,
offset: value.offset,
}
}
pub fn thread(value: AdminChatThreadDto) -> pb::AdminChatThread {
pb::AdminChatThread {
id: value.id.to_string(),
name: value.name,
owner_id: value.owner_id.to_string(),
reply_count: value.reply_count,
participant_count: value.participant_count,
archived: value.archived,
locked: value.locked,
created_at: ts(value.created_at),
}
}
pub fn message_detail(value: AdminChatMessageDetail) -> pb::AdminChatMessageDetail {
pb::AdminChatMessageDetail {
message: Some(message(value.message)),
edits: value.edits.into_iter().map(message_edit).collect(),
reactions: value.reactions.into_iter().map(reaction_group).collect(),
attachments: value.attachments.into_iter().map(attachment).collect(),
thread: value.thread.map(thread),
}
}
pub fn bulk_failure(value: BulkChatMessageFailure) -> pb::BulkChatMessageFailure {
pb::BulkChatMessageFailure {
id: value.id.to_string(),
error: value.error,
}
}
pub fn bulk_resp(value: BulkDeleteChatMessagesResp) -> pb::BulkDeleteChatMessagesResp {
pb::BulkDeleteChatMessagesResp {
succeeded: value
.succeeded
.into_iter()
.map(|value| value.to_string())
.collect(),
failed: value.failed.into_iter().map(bulk_failure).collect(),
}
}
pub fn purge_resp(value: PurgeChatMessagesResp) -> pb::PurgeChatMessagesResp {
pb::PurgeChatMessagesResp {
room_id: value.room_id.to_string(),
messages_deleted: value.messages_deleted,
attachments_deleted: value.attachments_deleted,
threads_deleted: value.threads_deleted,
}
}
pub fn delete_room_resp(value: DeleteChatRoomResp) -> pb::DeleteChatRoomResp {
pb::DeleteChatRoomResp {
room_id: value.room_id.to_string(),
messages_deleted: value.messages_deleted,
members_deleted: value.members_deleted,
attachments_deleted: value.attachments_deleted,
threads_deleted: value.threads_deleted,
}
}
pub fn delete_attachment_resp(value: DeleteChatAttachmentResp) -> pb::DeleteChatAttachmentResp {
pb::DeleteChatAttachmentResp {
id: value.id.to_string(),
s3_key: value.s3_key,
deleted: value.deleted,
storage_deleted: value.storage_deleted,
}
}
pub fn remove_member_resp(value: RemoveChatMemberResp) -> pb::RemoveChatMemberResp {
pb::RemoveChatMemberResp {
room_id: value.room_id.to_string(),
user_id: value.user_id.to_string(),
removed: value.removed,
}
}