chore: add new funcionality for the mailboxes
This commit is contained in:
@@ -163,4 +163,31 @@ export class EmailController {
|
||||
moveMessageToFavorite(@UserDec("wildduckUserId") userId: string, @Param() params: MessageParamDto) {
|
||||
return this.emailService.moveMessageToFavorite(userId, Number(params.messageId));
|
||||
}
|
||||
|
||||
@Patch("messages/:messageId/trash")
|
||||
@ApiOperation({ summary: "Move a message to trash mailbox" })
|
||||
@ApiResponse({ status: 200, description: "Message moved to trash successfully" })
|
||||
@ApiResponse({ status: 404, description: "Message not found" })
|
||||
@ApiResponse({ status: 403, description: "Not authorized to move message" })
|
||||
moveMessageToTrash(@UserDec("wildduckUserId") userId: string, @Param() params: MessageParamDto) {
|
||||
return this.emailService.moveMessageToTrash(userId, Number(params.messageId));
|
||||
}
|
||||
|
||||
@Patch("messages/:messageId/unarchive")
|
||||
@ApiOperation({ summary: "Move a message from archive back to inbox" })
|
||||
@ApiResponse({ status: 200, description: "Message moved from archive to inbox successfully" })
|
||||
@ApiResponse({ status: 404, description: "Message not found in archive" })
|
||||
@ApiResponse({ status: 403, description: "Not authorized to move message" })
|
||||
moveMessageToInboxFromArchive(@UserDec("wildduckUserId") userId: string, @Param() params: MessageParamDto) {
|
||||
return this.emailService.moveMessageToInboxFromArchive(userId, Number(params.messageId));
|
||||
}
|
||||
|
||||
@Patch("messages/:messageId/unfavorite")
|
||||
@ApiOperation({ summary: "Move a message from favorite back to inbox" })
|
||||
@ApiResponse({ status: 200, description: "Message moved from favorite to inbox successfully" })
|
||||
@ApiResponse({ status: 404, description: "Message not found in favorite" })
|
||||
@ApiResponse({ status: 403, description: "Not authorized to move message" })
|
||||
moveMessageToInboxFromFavorite(@UserDec("wildduckUserId") userId: string, @Param() params: MessageParamDto) {
|
||||
return this.emailService.moveMessageToInboxFromFavorite(userId, Number(params.messageId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -470,4 +470,114 @@ export class EmailService {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async moveMessageToTrash(userId: string, messageId: number) {
|
||||
this.logger.log(`Moving message ${messageId} to trash for user: ${userId}`);
|
||||
|
||||
try {
|
||||
const inboxMailboxId = await this.mailboxResolverService.getInboxMailboxId(userId);
|
||||
const trashMailboxId = await this.mailboxResolverService.getTrashMailboxId(userId);
|
||||
|
||||
const result = await firstValueFrom(
|
||||
this.mailServerService.messages.updateMessage(userId, inboxMailboxId, messageId, {
|
||||
moveTo: trashMailboxId,
|
||||
}),
|
||||
);
|
||||
|
||||
this.logger.log(`Message ${messageId} moved to trash successfully`);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: EmailMessage.MESSAGE_MOVED_TO_TRASH_SUCCESSFULLY,
|
||||
result,
|
||||
};
|
||||
} catch (error) {
|
||||
this.logger.error(
|
||||
`Failed to move message ${messageId} to trash for user ${userId}: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================
|
||||
async moveMessageToInboxFromArchive(userId: string, messageId: number) {
|
||||
this.logger.log(`Moving message ${messageId} from archive to inbox for user: ${userId}`);
|
||||
|
||||
try {
|
||||
const inboxMailboxId = await this.mailboxResolverService.getInboxMailboxId(userId);
|
||||
const archiveMailboxId = await this.mailboxResolverService.getArchiveMailboxId(userId);
|
||||
|
||||
const result = await firstValueFrom(
|
||||
this.mailServerService.messages.updateMessage(userId, archiveMailboxId, messageId, {
|
||||
moveTo: inboxMailboxId,
|
||||
}),
|
||||
);
|
||||
|
||||
// Emit WebSocket notification
|
||||
const payload: EmailMovePayload = {
|
||||
messageId,
|
||||
userId,
|
||||
fromMailboxId: archiveMailboxId,
|
||||
toMailboxId: inboxMailboxId,
|
||||
fromMailboxName: "Archive",
|
||||
toMailboxName: "Inbox",
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
await this.emailGateway.notifyMessageMoved(payload);
|
||||
|
||||
this.logger.log(`Message ${messageId} moved from archive to inbox successfully`);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: EmailMessage.MESSAGE_MOVED_TO_INBOX_FROM_ARCHIVE_SUCCESSFULLY,
|
||||
result,
|
||||
};
|
||||
} catch (error) {
|
||||
this.logger.error(
|
||||
`Failed to move message ${messageId} from archive to inbox for user ${userId}: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================
|
||||
async moveMessageToInboxFromFavorite(userId: string, messageId: number) {
|
||||
this.logger.log(`Moving message ${messageId} from favorite to inbox for user: ${userId}`);
|
||||
|
||||
try {
|
||||
const inboxMailboxId = await this.mailboxResolverService.getInboxMailboxId(userId);
|
||||
const favoriteMailboxId = await this.mailboxResolverService.getFavoriteMailboxId(userId);
|
||||
|
||||
const result = await firstValueFrom(
|
||||
this.mailServerService.messages.updateMessage(userId, favoriteMailboxId, messageId, {
|
||||
moveTo: inboxMailboxId,
|
||||
}),
|
||||
);
|
||||
|
||||
// Emit WebSocket notification
|
||||
const payload: EmailMovePayload = {
|
||||
messageId,
|
||||
userId,
|
||||
fromMailboxId: favoriteMailboxId,
|
||||
toMailboxId: inboxMailboxId,
|
||||
fromMailboxName: "Favorite",
|
||||
toMailboxName: "Inbox",
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
await this.emailGateway.notifyMessageMoved(payload);
|
||||
|
||||
this.logger.log(`Message ${messageId} moved from favorite to inbox successfully`);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: EmailMessage.MESSAGE_MOVED_TO_INBOX_FROM_FAVORITE_SUCCESSFULLY,
|
||||
result,
|
||||
};
|
||||
} catch (error) {
|
||||
this.logger.error(
|
||||
`Failed to move message ${messageId} from favorite to inbox for user ${userId}: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user