🎉 first commit
This commit is contained in:
67
app/routes/api.netlify.deploys.$deployId.$action.ts
Normal file
67
app/routes/api.netlify.deploys.$deployId.$action.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { type ActionFunctionArgs } from '@remix-run/node';
|
||||
import { requireAuth } from '~/lib/.server/auth';
|
||||
import { getNetlifyConnectionSettings } from '~/lib/.server/connectionSettings';
|
||||
import { errorResponse, successResponse } from '~/utils/api-response';
|
||||
import { createScopedLogger } from '~/utils/logger';
|
||||
|
||||
const logger = createScopedLogger('api.netlify.deploys');
|
||||
|
||||
export async function action({ request, params }: ActionFunctionArgs) {
|
||||
const authResult = await requireAuth(request, { isApi: true });
|
||||
if (authResult instanceof Response) {
|
||||
return authResult;
|
||||
}
|
||||
|
||||
const userId = authResult.userInfo?.sub;
|
||||
if (!userId) {
|
||||
return errorResponse(401, '用户未登录');
|
||||
}
|
||||
|
||||
const { deployId, action } = params;
|
||||
if (!deployId) {
|
||||
return errorResponse(400, '缺少部署ID');
|
||||
}
|
||||
|
||||
if (!action || !['lock', 'unlock', 'publish'].includes(action)) {
|
||||
return errorResponse(400, '无效的操作');
|
||||
}
|
||||
|
||||
try {
|
||||
const connectionSettings = await getNetlifyConnectionSettings(userId);
|
||||
|
||||
if (!connectionSettings) {
|
||||
return errorResponse(401, '未连接到Netlify,请先设置访问令牌');
|
||||
}
|
||||
|
||||
const { token } = connectionSettings;
|
||||
|
||||
// 获取请求体中的 siteId
|
||||
const { siteId } = await request.json();
|
||||
|
||||
const endpoint =
|
||||
action === 'publish'
|
||||
? `https://api.netlify.com/api/v1/sites/${siteId}/deploys/${deployId}/restore`
|
||||
: `https://api.netlify.com/api/v1/deploys/${deployId}/${action}`;
|
||||
|
||||
const response = await fetch(endpoint, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorText = await response.text();
|
||||
logger.error(`部署操作失败: ${response.status} ${errorText}`);
|
||||
return errorResponse(response.status, `部署${action}操作失败`);
|
||||
}
|
||||
|
||||
const responseData = await response.json();
|
||||
|
||||
logger.info(`用户 ${userId} 成功对部署 ${deployId} 执行了 ${action} 操作`);
|
||||
return successResponse(responseData, `部署${action}操作成功`);
|
||||
} catch (error) {
|
||||
logger.error(`部署${params.action}操作失败:`, error);
|
||||
return errorResponse(500, `部署${params.action}操作失败`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user