import { ReqHandler } from "@ethicdevs/react-monolith";
import { User } from "@prisma/client";
import { AppRoute, AppRoutesParams } from "app/routes";
import { makeOrganizationService } from "../../services/organization";
import { makeRepositoryService } from "../../services/repository";
import { makeUsersService } from "../../services/user";
import RepositoryCompareView, {
RepositoryCompareViewProps,
} from "../../views/repository/RepositoryCompareView";
const getRepositoryCompareView: ReqHandler = async (request, reply) => {
const { curr_user_uid } = request.session.data;
const { orgSlug, repoSlug, refA, refB } =
request.params as AppRoutesParams[AppRoute.REPOSITORY_COMPARE]["params"];
const orgService = makeOrganizationService({ request });
const repoService = makeRepositoryService({ request });
const userService = makeUsersService({ request });
const parentOrg = await orgService.getOrganizationBySlug(orgSlug);
const repo = await repoService.getRepository(orgSlug, repoSlug);
if (parentOrg == null || repo == null) {
return reply.status(404).callNotFound();
}
let currentUser: null | User = null;
if (curr_user_uid != null) {
currentUser = await userService.getUserById(curr_user_uid);
}
const filesDiffs = await repoService.getRepositoryRefDiff(repo, refA, refB);
const reqHandler = reply.makeRequestHandler(request, reply);
reqHandler<RepositoryCompareViewProps>(RepositoryCompareView.name, {
currentUser,
filesDiffs,
parentOrg,
repo,
refA,
refB,
});
};
export default getRepositoryCompareView;