import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import { Repository, ResourceVisibility } from "@prisma/client";
import type { RepositoryServiceDeps } from "./types";
import { default as makeGetHttpCloneUrl } from "./getHttpCloneUrl";
import { default as makeGetSshCloneUrl } from "./getSshCloneUrl";
const makeGetRepositoryExploreCollection: ServiceMethodFactory<
RepositoryServiceDeps,
void[],
Promise<Repository[]>
> = (deps) => {
const { request } = deps;
const getHttpCloneUrl = makeGetHttpCloneUrl(deps);
const getSshCloneUrl = makeGetSshCloneUrl(deps);
return async () => {
const repositories = await request.prisma.repository.findMany({
where: {
visibility: ResourceVisibility.PUBLIC,
},
});
const repositoriesWithMetas = await Promise.all(
repositories.map(async (repo) => ({
...repo,
httpCloneUrl: await getHttpCloneUrl(repo),
sshCloneUrl: await getSshCloneUrl(repo),
}))
);
return repositoriesWithMetas;
};
};
export default makeGetRepositoryExploreCollection;