GitFOSS
.ts
TypeScript
(application/typescript)
// 1st-party
import { ReqHandler } from "@ethicdevs/react-monolith";
// generated via script[generate:prisma]
import { User } from "@prisma/client";
import { AppRoute, AppRoutesParams } from "app/routes";
// app services
import { makeOrganizationService } from "../../services/organization";
import { makeRepositoryService } from "../../services/repository";
import { makeUsersService } from "../../services/user";
// app views
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;