49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
|
|
import { prisma } from "~/db.server";
|
|
import { redirectWithSuccessMessage } from "~/models/message.server";
|
|
import { OrgIntegrationRepository } from "~/models/orgIntegration.server";
|
|
import { findProjectBySlug } from "~/models/project.server";
|
|
import { requireUserId } from "~/services/session.server";
|
|
import {
|
|
EnvironmentParamSchema,
|
|
v3ErrorsPath,
|
|
v3ErrorsConnectToSlackPath,
|
|
} from "~/utils/pathBuilder";
|
|
|
|
export async function loader({ request, params }: LoaderFunctionArgs) {
|
|
const userId = await requireUserId(request);
|
|
const { organizationSlug, projectParam, envParam } = EnvironmentParamSchema.parse(params);
|
|
|
|
const url = new URL(request.url);
|
|
const shouldReinstall = url.searchParams.get("reinstall") === "true";
|
|
|
|
const project = await findProjectBySlug(organizationSlug, projectParam, userId);
|
|
|
|
if (!project) {
|
|
throw new Response("Project not found", { status: 404 });
|
|
}
|
|
|
|
const integration = await prisma.organizationIntegration.findFirst({
|
|
where: {
|
|
service: "SLACK",
|
|
organizationId: project.organizationId,
|
|
deletedAt: null,
|
|
},
|
|
});
|
|
|
|
if (integration && !shouldReinstall) {
|
|
return redirectWithSuccessMessage(
|
|
`${v3ErrorsPath({ slug: organizationSlug }, project, { slug: envParam })}?alerts`,
|
|
request,
|
|
"Successfully connected your Slack workspace"
|
|
);
|
|
}
|
|
|
|
return await OrgIntegrationRepository.redirectToAuthService(
|
|
"SLACK",
|
|
project.organizationId,
|
|
request,
|
|
v3ErrorsConnectToSlackPath({ slug: organizationSlug }, project, { slug: envParam })
|
|
);
|
|
}
|