mirror of
https://github.com/saltbo/zpan.git
synced 2026-08-28 15:51:29 +08:00
da286e9db3
Agent-Profile: https://agent-kanban.dev/agents/1dc839c09b5ee5e5 Co-authored-by: Marina Zhou <marina-zhou@mails.agent-kanban.dev>
72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import { OpenAPIHono, z } from '@hono/zod-openapi'
|
|
import { createTestEmailSchema, emailSettingsSchema, updateEmailSettingsSchema } from '@shared/schemas'
|
|
import { requireAdmin } from '../../middleware/auth'
|
|
import type { Env } from '../../middleware/platform'
|
|
import { getEmailConfig, saveEmailConfig, sendTestEmail } from '../../usecases/site/email-config'
|
|
import { authRoute, errorResponse, jsonContent } from '../openapi'
|
|
|
|
const successSchema = z.object({ success: z.boolean() })
|
|
|
|
const getRoute = authRoute(
|
|
{ access: 'admin' },
|
|
{
|
|
operationId: 'getEmailConfig',
|
|
summary: 'Get email configuration',
|
|
tags: ['Email Config'],
|
|
method: 'get',
|
|
path: '/',
|
|
middleware: [requireAdmin] as const,
|
|
responses: { 200: jsonContent(emailSettingsSchema, 'Email settings') },
|
|
},
|
|
)
|
|
|
|
const saveRoute = authRoute(
|
|
{ access: 'admin' },
|
|
{
|
|
operationId: 'saveEmailConfig',
|
|
summary: 'Save email configuration',
|
|
tags: ['Email Config'],
|
|
method: 'put',
|
|
path: '/',
|
|
middleware: [requireAdmin] as const,
|
|
request: { body: { content: { 'application/json': { schema: updateEmailSettingsSchema } }, required: true } },
|
|
responses: {
|
|
200: jsonContent(successSchema, 'Saved'),
|
|
400: errorResponse('Invalid email configuration'),
|
|
},
|
|
},
|
|
)
|
|
|
|
const testRoute = authRoute(
|
|
{ access: 'admin' },
|
|
{
|
|
operationId: 'sendTestEmail',
|
|
summary: 'Send a test email',
|
|
tags: ['Email Config'],
|
|
method: 'post',
|
|
path: '/test-messages',
|
|
middleware: [requireAdmin] as const,
|
|
request: { body: { content: { 'application/json': { schema: createTestEmailSchema } }, required: true } },
|
|
responses: {
|
|
200: jsonContent(successSchema, 'Sent'),
|
|
400: errorResponse('Send failed'),
|
|
},
|
|
},
|
|
)
|
|
|
|
const app = new OpenAPIHono<Env>()
|
|
|
|
const emailConfig = app
|
|
.openapi(getRoute, async (c) => c.json(await getEmailConfig(c.get('deps'), c.get('platform')), 200))
|
|
.openapi(saveRoute, async (c) => {
|
|
await saveEmailConfig(c.get('deps'), c.req.valid('json'))
|
|
return c.json({ success: true }, 200)
|
|
})
|
|
.openapi(testRoute, async (c) => {
|
|
const result = await sendTestEmail(c.get('deps'), c.get('platform'), c.req.valid('json').to)
|
|
if (!result.ok) throw result.error
|
|
return c.json({ success: true }, 200)
|
|
})
|
|
|
|
export default emailConfig
|