175 lines
4.9 KiB
TypeScript
175 lines
4.9 KiB
TypeScript
/**
|
|
* 账号管理 IPC 处理器
|
|
* 提供平台账号的增删改查功能
|
|
*/
|
|
|
|
import { ipcMain } from 'electron';
|
|
import { Log } from '../log/main';
|
|
import DbMain from '../db/main';
|
|
import { PlatformAccount } from './types';
|
|
|
|
/**
|
|
* 支持的平台列表
|
|
*/
|
|
const SUPPORTED_PLATFORMS = [
|
|
{ key: 'douyin', name: '抖音' },
|
|
{ key: 'kuaishou', name: '快手' },
|
|
{ key: 'shipin', name: '视频号' },
|
|
{ key: 'xiaohongshu', name: '小红书' },
|
|
];
|
|
|
|
/**
|
|
* 获取支持的平台列表
|
|
*/
|
|
ipcMain.handle('account:getSupportedPlatforms', async () => {
|
|
return { success: true, data: SUPPORTED_PLATFORMS };
|
|
});
|
|
|
|
/**
|
|
* 获取所有账号列表
|
|
*/
|
|
ipcMain.handle('account:list', async (event, params?: { platform?: string }) => {
|
|
try {
|
|
let sql = 'SELECT * FROM platform_accounts';
|
|
const sqlParams: any[] = [];
|
|
|
|
if (params?.platform) {
|
|
sql += ' WHERE platform = ?';
|
|
sqlParams.push(params.platform);
|
|
}
|
|
|
|
sql += ' ORDER BY updatedAt DESC';
|
|
|
|
const accounts = await DbMain.select(sql, sqlParams);
|
|
|
|
// 不返回 cookies 原文(太长),只返回是否有 cookies
|
|
const safeAccounts = accounts.map((a: any) => ({
|
|
...a,
|
|
hasCookies: !!a.cookies && a.cookies.length > 10,
|
|
cookies: undefined, // 移除 cookies 原文
|
|
tokens: undefined, // 移除 tokens 原文
|
|
}));
|
|
|
|
return { success: true, data: safeAccounts };
|
|
} catch (error: any) {
|
|
Log.error('account:list error', error);
|
|
return { success: false, message: error.message };
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 添加新账号
|
|
*/
|
|
ipcMain.handle('account:add', async (event, params: { platform: string; nickname?: string }) => {
|
|
try {
|
|
const { platform, nickname } = params;
|
|
|
|
// 验证平台
|
|
if (!SUPPORTED_PLATFORMS.find(p => p.key === platform)) {
|
|
return { success: false, message: `不支持的平台: ${platform}` };
|
|
}
|
|
|
|
const now = Date.now();
|
|
const accountId = await DbMain.insert(
|
|
`INSERT INTO platform_accounts (platform, nickname, loginStatus, createdAt, updatedAt)
|
|
VALUES (?, ?, ?, ?, ?)`,
|
|
[platform, nickname || '未登录', 'pending', now, now]
|
|
);
|
|
|
|
Log.info(`新账号已创建: platform=${platform}, id=${accountId}`);
|
|
|
|
return {
|
|
success: true,
|
|
data: { id: accountId, platform, nickname: nickname || '未登录', loginStatus: 'pending' }
|
|
};
|
|
} catch (error: any) {
|
|
Log.error('account:add error', error);
|
|
return { success: false, message: error.message };
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 删除账号
|
|
*/
|
|
ipcMain.handle('account:delete', async (event, params: { accountId: number }) => {
|
|
try {
|
|
const { accountId } = params;
|
|
|
|
const account = await DbMain.first(
|
|
'SELECT * FROM platform_accounts WHERE id = ?',
|
|
[accountId]
|
|
);
|
|
|
|
if (!account) {
|
|
return { success: false, message: '账号不存在' };
|
|
}
|
|
|
|
await DbMain.execute('DELETE FROM platform_accounts WHERE id = ?', [accountId]);
|
|
Log.info(`账号已删除: id=${accountId}, platform=${account.platform}`);
|
|
|
|
return { success: true, message: '账号已删除' };
|
|
} catch (error: any) {
|
|
Log.error('account:delete error', error);
|
|
return { success: false, message: error.message };
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 更新账号信息
|
|
*/
|
|
ipcMain.handle('account:update', async (event, params: { accountId: number; nickname?: string }) => {
|
|
try {
|
|
const { accountId, nickname } = params;
|
|
const now = Date.now();
|
|
|
|
const updates: string[] = ['updatedAt = ?'];
|
|
const values: any[] = [now];
|
|
|
|
if (nickname !== undefined) {
|
|
updates.push('nickname = ?');
|
|
values.push(nickname);
|
|
}
|
|
|
|
values.push(accountId);
|
|
|
|
await DbMain.execute(
|
|
`UPDATE platform_accounts SET ${updates.join(', ')} WHERE id = ?`,
|
|
values
|
|
);
|
|
|
|
return { success: true, message: '账号已更新' };
|
|
} catch (error: any) {
|
|
Log.error('account:update error', error);
|
|
return { success: false, message: error.message };
|
|
}
|
|
});
|
|
|
|
/**
|
|
* 获取单个账号详情
|
|
*/
|
|
ipcMain.handle('account:get', async (event, params: { accountId: number }) => {
|
|
try {
|
|
const account = await DbMain.first(
|
|
'SELECT * FROM platform_accounts WHERE id = ?',
|
|
[params.accountId]
|
|
);
|
|
|
|
if (!account) {
|
|
return { success: false, message: '账号不存在' };
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
data: {
|
|
...account,
|
|
hasCookies: !!account.cookies && account.cookies.length > 10,
|
|
cookies: undefined,
|
|
tokens: undefined,
|
|
}
|
|
};
|
|
} catch (error: any) {
|
|
Log.error('account:get error', error);
|
|
return { success: false, message: error.message };
|
|
}
|
|
});
|