import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import { Prisma, Organization, Repository, User } from "@prisma/client";
import type { UsersServiceDeps } from "./types";
const getUserRepositories: ServiceMethodFactory<
UsersServiceDeps,
[User, undefined | Prisma.RepositoryWhereInput],
Promise<(Repository & { parentOrg: Organization })[]>
> = ({ request }) => {
return async (user, where = undefined) => {
const userRepos = await request.prisma.repository.findMany({
include: {
organization: true,
},
where: where || {
OR: [
{
organization: {
ownerId: user.id,
},
},
{
organization: {
memberships: {
some: {
userId: user.id,
},
},
},
},
],
},
orderBy: {
lastPushedAt: "desc",
},
});
return userRepos.map(({ organization: parentOrg, ...repo }) => ({
...repo,
parentOrg,
}));
};
};
export default getUserRepositories;