207 lines
5.4 KiB
TypeScript
207 lines
5.4 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import { mailAccountFileService } from '../services/mailAccountFileService';
|
|
|
|
export class MailAccountFileController {
|
|
async getAllAccounts(req: Request, res: Response) {
|
|
try {
|
|
const accounts = await mailAccountFileService.getAllAccounts();
|
|
|
|
// 비밀번호는 반환하지 않음
|
|
const safeAccounts = accounts.map(({ smtpPassword, ...account }) => account);
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: safeAccounts,
|
|
total: safeAccounts.length,
|
|
});
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '계정 조회 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
async getAccountById(req: Request, res: Response) {
|
|
try {
|
|
const { id } = req.params;
|
|
const account = await mailAccountFileService.getAccountById(id);
|
|
|
|
if (!account) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '계정을 찾을 수 없습니다.',
|
|
});
|
|
}
|
|
|
|
// 비밀번호는 마스킹 처리
|
|
const { smtpPassword, ...safeAccount } = account;
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: {
|
|
...safeAccount,
|
|
smtpPassword: '••••••••', // 마스킹
|
|
},
|
|
});
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '계정 조회 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
async createAccount(req: Request, res: Response) {
|
|
try {
|
|
const {
|
|
name,
|
|
email,
|
|
smtpHost,
|
|
smtpPort,
|
|
smtpSecure,
|
|
smtpUsername,
|
|
smtpPassword,
|
|
dailyLimit,
|
|
status,
|
|
} = req.body;
|
|
|
|
if (!name || !email || !smtpHost || !smtpPort || !smtpUsername || !smtpPassword) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: '필수 필드가 누락되었습니다.',
|
|
});
|
|
}
|
|
|
|
// 이메일 중복 확인
|
|
const existingAccount = await mailAccountFileService.getAccountByEmail(email);
|
|
if (existingAccount) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: '이미 등록된 이메일입니다.',
|
|
});
|
|
}
|
|
|
|
const account = await mailAccountFileService.createAccount({
|
|
name,
|
|
email,
|
|
smtpHost,
|
|
smtpPort,
|
|
smtpSecure: smtpSecure || false,
|
|
smtpUsername,
|
|
smtpPassword,
|
|
dailyLimit: dailyLimit || 1000,
|
|
status: status || 'active',
|
|
});
|
|
|
|
// 비밀번호 제외하고 반환
|
|
const { smtpPassword: _, ...safeAccount } = account;
|
|
|
|
return res.status(201).json({
|
|
success: true,
|
|
data: safeAccount,
|
|
message: '메일 계정이 생성되었습니다.',
|
|
});
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '계정 생성 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
async updateAccount(req: Request, res: Response) {
|
|
try {
|
|
const { id } = req.params;
|
|
const updates = req.body;
|
|
|
|
const account = await mailAccountFileService.updateAccount(id, updates);
|
|
|
|
if (!account) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '계정을 찾을 수 없습니다.',
|
|
});
|
|
}
|
|
|
|
// 비밀번호 제외하고 반환
|
|
const { smtpPassword: _, ...safeAccount } = account;
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: safeAccount,
|
|
message: '계정이 수정되었습니다.',
|
|
});
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '계정 수정 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
async deleteAccount(req: Request, res: Response) {
|
|
try {
|
|
const { id } = req.params;
|
|
const success = await mailAccountFileService.deleteAccount(id);
|
|
|
|
if (!success) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '계정을 찾을 수 없습니다.',
|
|
});
|
|
}
|
|
|
|
return res.json({
|
|
success: true,
|
|
message: '계정이 삭제되었습니다.',
|
|
});
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '계정 삭제 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
async testConnection(req: Request, res: Response) {
|
|
try {
|
|
const { id } = req.params;
|
|
|
|
const account = await mailAccountFileService.getAccountById(id);
|
|
if (!account) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '계정을 찾을 수 없습니다.',
|
|
});
|
|
}
|
|
|
|
// mailSendSimpleService의 testConnection 사용
|
|
const { mailSendSimpleService } = require('../services/mailSendSimpleService');
|
|
const result = await mailSendSimpleService.testConnection(id);
|
|
|
|
return res.json(result);
|
|
} catch (error: unknown) {
|
|
const err = error as Error;
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: '연결 테스트 실패',
|
|
error: err.message,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
export const mailAccountFileController = new MailAccountFileController();
|
|
|