William Nemenchaimprove code
c048dc5 (parent 3e8b201)4/7/2024, 3:04:16 AM
.ts
TypeScript
(application/typescript)
// 1st-party
import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
// generated via script[generate:prisma]
import { Repository, ResourceVisibility } from "@prisma/client";
// app
import { Env } from "../../env";
// service
import type { RepositoryServiceDeps } from "./types";

const makeGetRepositoryHTTPCloneUrl: ServiceMethodFactory<
  RepositoryServiceDeps,
  [Repository],
  Promise<string>
> = ({ request }) => {
  return async (repo) => {
    const parentOrg = await request.prisma.organization.findUnique({
      where: {
        id: repo.organizationId,
      },
    });

    if (parentOrg == null) {
      throw new Error(
        `Could not find the parent organization for project "${repo.slug}".`
      );
    }

    const authCredentials =
      repo.visibility === ResourceVisibility.PRIVATE
        ? `${parentOrg.slug}:secret@`
        : "";
    const baseUrl = `${Env.DEPLOYMENT_SCHEME}://${authCredentials}${Env.DEPLOYMENT_DOMAIN}`;
    const port = Env.PORT != 80 && Env.PORT != 443 ? `:${Env.PORT}` : "";

    return `${baseUrl}${port}/${parentOrg.slug}/${repo.slug}.git`;
  };
};

export default makeGetRepositoryHTTPCloneUrl;