import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import type { Repository, User } from "@prisma/client";
import type { RepositoryServiceDeps } from "./types";
const makeCanUserAccessRepository: ServiceMethodFactory<
RepositoryServiceDeps,
[User, Repository],
Promise<boolean>
> = ({ request }) => {
return async (user, repo) => {
const parentOrg = await request.prisma.organization.findUnique({
include: {
memberships: true,
},
where: {
id: repo.organizationId,
},
});
return (
parentOrg != null &&
(user.id === parentOrg.ownerId ||
parentOrg.memberships.find(
(m) => user.id === m.userId && m.revokedAt == null
) != null)
);
};
};
export default makeCanUserAccessRepository;