You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
6.7 KiB
Python

from typing import Annotated
from fastapi import APIRouter, Body, Depends, Path
from app.common.response import ResponseSchema, SuccessResponse
from app.core.base_params import PaginationQueryParam
from app.core.base_schema import AuthSchema, PageResultSchema
from app.core.dependencies import AuthPermission
from app.core.router_class import OperationLogRoute
from .schema import (
EmailConfigCreateSchema,
EmailConfigOutSchema,
EmailConfigQueryParam,
EmailConfigUpdateSchema,
EmailLogOutSchema,
EmailLogQueryParam,
EmailSendSchema,
EmailTemplateCreateSchema,
EmailTemplateOutSchema,
EmailTemplateQueryParam,
EmailTemplateUpdateSchema,
EmailTestSchema,
)
from .service import EmailConfigService, EmailLogService, EmailSendService, EmailTemplateService
EmailRouter = APIRouter(route_class=OperationLogRoute, prefix="/email", tags=["平台管理", "邮件服务"])
@EmailRouter.get("/config/list", summary="SMTP 配置列表", response_model=ResponseSchema[PageResultSchema[EmailConfigOutSchema]])
async def email_config_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[EmailConfigQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:query"]))],
):
result = await EmailConfigService(auth).page(
page_no=page.page_no,
page_size=page.page_size,
search=search,
order_by=page.order_by,
)
return SuccessResponse(data=result, msg="查询成功")
@EmailRouter.get("/config/detail/{id}", summary="SMTP 配置详情", response_model=ResponseSchema[EmailConfigOutSchema])
async def email_config_detail_controller(
id: Annotated[int, Path()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:query"]))],
):
result = await EmailConfigService(auth).detail(id=id)
return SuccessResponse(data=result, msg="查询成功")
@EmailRouter.post("/config/create", summary="创建 SMTP 配置", response_model=ResponseSchema[EmailConfigOutSchema])
async def email_config_create_controller(
data: EmailConfigCreateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailConfigService(auth).create(data=data)
return SuccessResponse(data=result, msg="创建成功")
@EmailRouter.put("/config/update/{id}", summary="更新 SMTP 配置", response_model=ResponseSchema[EmailConfigOutSchema])
async def email_config_update_controller(
id: Annotated[int, Path()],
data: EmailConfigUpdateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailConfigService(auth).update(id=id, data=data)
return SuccessResponse(data=result, msg="更新成功")
@EmailRouter.delete("/config/delete", summary="删除 SMTP 配置", response_model=ResponseSchema[None])
async def email_config_delete_controller(
ids: Annotated[list[int], Body()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
await EmailConfigService(auth).delete(ids=ids)
return SuccessResponse(msg="删除成功")
@EmailRouter.post("/config/test", summary="测试 SMTP 连接", response_model=ResponseSchema)
async def email_config_test_controller(
data: EmailTestSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailConfigService(auth).test(data=data)
return SuccessResponse(data=result, msg="测试邮件已发送")
@EmailRouter.get("/template/list", summary="邮件模板列表", response_model=ResponseSchema[PageResultSchema[EmailTemplateOutSchema]])
async def email_template_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[EmailTemplateQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:query"]))],
):
result = await EmailTemplateService(auth).page(
page_no=page.page_no,
page_size=page.page_size,
search=search,
order_by=page.order_by,
)
return SuccessResponse(data=result, msg="查询成功")
@EmailRouter.get("/template/detail/{id}", summary="邮件模板详情", response_model=ResponseSchema[EmailTemplateOutSchema])
async def email_template_detail_controller(
id: Annotated[int, Path()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:query"]))],
):
result = await EmailTemplateService(auth).detail(id=id)
return SuccessResponse(data=result, msg="查询成功")
@EmailRouter.post("/template/create", summary="创建邮件模板", response_model=ResponseSchema[EmailTemplateOutSchema])
async def email_template_create_controller(
data: EmailTemplateCreateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailTemplateService(auth).create(data=data)
return SuccessResponse(data=result, msg="创建成功")
@EmailRouter.put("/template/update/{id}", summary="更新邮件模板", response_model=ResponseSchema[EmailTemplateOutSchema])
async def email_template_update_controller(
id: Annotated[int, Path()],
data: EmailTemplateUpdateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailTemplateService(auth).update(id=id, data=data)
return SuccessResponse(data=result, msg="更新成功")
@EmailRouter.delete("/template/delete", summary="删除邮件模板", response_model=ResponseSchema[None])
async def email_template_delete_controller(
ids: Annotated[list[int], Body()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
await EmailTemplateService(auth).delete(ids=ids)
return SuccessResponse(msg="删除成功")
@EmailRouter.post("/send", summary="手动发送邮件(超管测试/补发)", response_model=ResponseSchema)
async def email_send_controller(
data: EmailSendSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:update"]))],
):
result = await EmailSendService(auth).manual_send(data=data)
return SuccessResponse(data=result, msg="发送成功")
@EmailRouter.get("/log/list", summary="邮件发送日志", response_model=ResponseSchema[PageResultSchema[EmailLogOutSchema]])
async def email_log_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[EmailLogQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_platform:email:query"]))],
):
result = await EmailLogService(auth).page(
page_no=page.page_no,
page_size=page.page_size,
search=search,
order_by=page.order_by,
)
return SuccessResponse(data=result, msg="查询成功")