TypeScript Prisma CRUD
Prisma ORM을 사용하여 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 수행하는 TypeScript 유틸리티 패턴입니다.
import { PrismaClient, User, Prisma } from '@prisma/client';
const prisma = new PrismaClient();
/**
* 사용자 생성
*/
export async function createUser(data: Prisma.UserCreateInput): Promise<User> {
return await prisma.user.create({
data,
});
}
/**
* ID로 사용자 조회
*/
export async function getUserById(id: number): Promise<User | null> {
return await prisma.user.findUnique({
where: { id },
include: {
posts: true, // 관계된 데이터 포함 예시
},
});
}
/**
* 필터링 및 페이징을 포함한 사용자 목록 조회
*/
export async function getUsers(params: {
skip?: number;
take?: number;
cursor?: Prisma.UserWhereUniqueInput;
where?: Prisma.UserWhereInput;
orderBy?: Prisma.UserOrderByWithRelationInput;
}) {
const { skip, take, cursor, where, orderBy } = params;
return await prisma.user.findMany({
skip,
take,
cursor,
where,
orderBy,
});
}
/**
* 사용자 정보 업데이트
*/
export async function updateUser(id: number, data: Prisma.UserUpdateInput): Promise<User> {
return await prisma.user.update({
where: { id },
data,
});
}
/**
* 사용자 삭제
*/
export async function deleteUser(id: number): Promise<User> {
return await prisma.user.delete({
where: { id },
});
}
/**
* 트랜잭션 사용 예시
*/
export async function createUserWithProfile(
userData: Prisma.UserCreateInput,
profileData: Prisma.ProfileCreateInput
) {
return await prisma.$transaction(async (tx) => {
const user = await tx.user.create({ data: userData });
const profile = await tx.profile.create({
data: {
...profileData,
userId: user.id,
},
});
return { user, profile };
});
}