Skip to content

Instantly share code, notes, and snippets.

@deyvisonborges
Created October 13, 2023 20:58
Show Gist options
  • Save deyvisonborges/0ef24efecb67550bc8e7fa2aa77bc53b to your computer and use it in GitHub Desktop.
Save deyvisonborges/0ef24efecb67550bc8e7fa2aa77bc53b to your computer and use it in GitHub Desktop.
Base Prisma Repository
// Implementation
export class UserRepository extends PrismaRepository<'user'> {}
import { PrismaClient } from '@prisma/client';
import { PrismaService } from '../integrations/prismaService';
export class PrismaRepository<
K extends Exclude<keyof PrismaClient, symbol | `$${string}`>,
> {
private readonly model!: K;
constructor(private readonly prisma: PrismaService) {}
aggregate(...args: Parameters<PrismaClient[K]['aggregate']>) {
return (this.prisma[this.model].aggregate as any)(...args);
}
count(...args: Parameters<PrismaClient[K]['count']>) {
return (this.prisma[this.model].count as any)(...args);
}
create(...args: Parameters<PrismaClient[K]['create']>) {
return (this.prisma[this.model].create as any)(...args);
}
delete(...args: Parameters<PrismaClient[K]['delete']>) {
return (this.prisma[this.model].delete as any)(...args);
}
findFirst(...args: Parameters<PrismaClient[K]['findFirst']>) {
return (this.prisma[this.model].findFirst as any)(...args);
}
findFirstOrThrow(...args: Parameters<PrismaClient[K]['findFirstOrThrow']>) {
return (this.prisma[this.model].findFirstOrThrow as any)(...args);
}
findMany(...args: Parameters<PrismaClient[K]['findMany']>) {
return (this.prisma[this.model].findMany as any)(...args);
}
findUnique(...args: Parameters<PrismaClient[K]['findUnique']>) {
return (this.prisma[this.model].findUnique as any)(...args);
}
findUniqueOrThrow(...args: Parameters<PrismaClient[K]['findUniqueOrThrow']>) {
return (this.prisma[this.model].findUniqueOrThrow as any)(...args);
}
update(...args: Parameters<PrismaClient[K]['update']>) {
return (this.prisma[this.model].update as any)(...args);
}
updateMany(...args: Parameters<PrismaClient[K]['updateMany']>) {
return (this.prisma[this.model].updateMany as any)(...args);
}
upsert(...args: Parameters<PrismaClient[K]['upsert']>) {
return (this.prisma[this.model].upsert as any)(...args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment