import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import { Repository, ResourceVisibility } from "@prisma/client";
import type { RepositoryServiceDeps } from "./types";
import { default as makeGetRepositoryHTTPCloneUrl } from "./getRepositoryHTTPCloneUrl";
import { default as makeGetRepositorySSHCloneUrl } from "./getRepositorySSHCloneUrl";
const makeGetRepositoryExploreCollection: ServiceMethodFactory<
RepositoryServiceDeps,
void[],
Promise<Repository[]>
> = (deps) => {
const { request } = deps;
const getRepositoryHTTPCloneUrl = makeGetRepositoryHTTPCloneUrl(deps);
const getRepositorySSHCloneUrl = makeGetRepositorySSHCloneUrl(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 getRepositoryHTTPCloneUrl(repo),
sshCloneUrl: await getRepositorySSHCloneUrl(repo),
}))
);
return repositoriesWithMetas;
};
};
export default makeGetRepositoryExploreCollection;