chore: add email and mailbox module

This commit is contained in:
mahyargdz
2025-07-08 09:37:26 +03:30
parent b66114c900
commit b3ab6c8a10
26 changed files with 976 additions and 60 deletions
+63
View File
@@ -0,0 +1,63 @@
import { Body, Controller, Delete, Get, Param, Post, Query } from "@nestjs/common";
import { ApiOperation, ApiResponse } from "@nestjs/swagger";
import { QueueIdParamDto, UserIdParamDto, UserMailboxMessageParamDto, UserMailboxParamDto } from "./DTO/email-params.dto";
import { MessageListQueryDto } from "./DTO/email-query.dto";
import { SearchMessagesQueryDto } from "./DTO/email-query.dto";
import { SendEmailDto } from "./DTO/send-email.dto";
import { EmailService } from "./services/email.service";
import { AuthGuards } from "../../common/decorators/auth-guard.decorator";
@Controller("email")
@AuthGuards()
export class EmailController {
constructor(private readonly emailService: EmailService) {}
@Post(":userId/send")
@ApiOperation({ summary: "Send an email" })
@ApiResponse({ status: 201, description: "Email sent successfully" })
@ApiResponse({ status: 400, description: "Invalid email data" })
@ApiResponse({ status: 403, description: "Not authorized to send email" })
sendEmail(@Param() params: UserIdParamDto, @Body() sendEmailDto: SendEmailDto) {
return this.emailService.sendEmail(params.userId, sendEmailDto);
}
@Get("status/:queueId")
@ApiOperation({ summary: "Get email delivery status" })
@ApiResponse({ status: 200, description: "Email delivery status" })
@ApiResponse({ status: 404, description: "Email not found" })
getEmailStatus(@Param() params: QueueIdParamDto) {
return this.emailService.getEmailStatus(params.queueId);
}
@Get(":userId/messages/:mailboxId")
@ApiOperation({ summary: "List messages in a mailbox" })
@ApiResponse({ status: 200, description: "List of messages" })
@ApiResponse({ status: 404, description: "Mailbox not found" })
listMessages(@Param() params: UserMailboxParamDto, @Query() query: MessageListQueryDto) {
return this.emailService.listMessages(params.userId, params.mailboxId, query);
}
@Get(":userId/messages/:mailboxId/:messageId")
@ApiOperation({ summary: "Get a specific message" })
@ApiResponse({ status: 200, description: "Message details" })
@ApiResponse({ status: 404, description: "Message not found" })
getMessage(@Param() params: UserMailboxMessageParamDto) {
return this.emailService.getMessage(params.userId, params.mailboxId, params.messageId);
}
@Delete(":userId/messages/:mailboxId/:messageId")
@ApiOperation({ summary: "Delete a message" })
@ApiResponse({ status: 200, description: "Message deleted successfully" })
@ApiResponse({ status: 404, description: "Message not found" })
deleteMessage(@Param() params: UserMailboxMessageParamDto) {
return this.emailService.deleteMessage(params.userId, params.mailboxId, params.messageId);
}
@Get(":userId/search")
@ApiOperation({ summary: "Search messages across all mailboxes" })
@ApiResponse({ status: 200, description: "Search results" })
searchMessages(@Param() params: UserIdParamDto, @Query() query: SearchMessagesQueryDto) {
return this.emailService.searchMessages(params.userId, query);
}
}