Account Logic에서 만들어본 코드는 중복되는 부분이 많다 그러므로 upsert를 이용해 중복부분을 제거해 볼 것이다.
Update + Insert를 합친말로 데이터베이스에 해당 데이터가 존재한다면 업데이트 시키고, 없다면 새로 입력하는 것을 말한다.
async function handler(req: NextApiRequest, res: NextApiResponse) {
const { phone, email } = req.body;
let user;
if (phone) {
user = await client.user.upsert({
where: {
phone: +phone,
},
create: {
name: "Anonymous",
phone: +phone,
},
update: {},
});
} else if (email) {
user = await client.user.upsert({
where: {
email,
},
create: {
name: "Anonymous",
email,
},
update: {},
});
}
return res.status(200).end();
}
email이나 phone이 데이터베이스에 없으면 create를 실행시키고 있으면 update를 실행시킨다.
async function handler(req: NextApiRequest, res: NextApiResponse) {
const { phone, email } = req.body;
const user = await client.user.upsert({
where: {
...(phone && { phone: +phone }),
...(email && { email }),
},
create: {
name: "Anonymous",
...(phone ? { phone: +phone } : {}),
...(email ? { email } : {}),
},
update: {},
});
return res.status(200).end();
}
...(phone ? { phone: +phone } : {}),
...(email ? { email } : {}),
그러나 여전히 위의 부분이 중복되므로 중복을 제거해보자.
async function handler(req: NextApiRequest, res: NextApiResponse) {
const { phone, email } = req.body;
const payload = phone ? { phone: +phone } : { email };
const user = await client.user.upsert({
where: {
...payload,
},
create: {
name: "Anonymous",
...payload,
},
update: {},
});
console.log(user);
return res.status(200).end();
}