$ npx prisma init
prisma 초기화.
// in schema.prisma
model User {
id Int @id @default(autoincrement())
username String @unique
email String @unique
name String
location String
password String
avatarURL String?
githubUsername String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
$npx prisma migrate dev --preview-feature
prisma 를 통해 데이터베이스에 저장.
// in user.typedefs.js
export default gql`
type User {
id: String!
username: String!
email: String!
name: String!
location: String!
avatarURL: String
githubUsername: String
createdAt: String!
updatedAt: String!
}
`;
prisma 에서는 기본이 require이고 gql에서는 기본이 optaional 이다.
// in createAccount.typedefs.js
import {gql} from "apollo-server-core";
export default gql`
type createAccountResult {
ok: Boolean!
error: String
}
type Mutation {
createAccount(
username: String!
email: String!
name: String!
location: String!
avatarURL: String
githubUsername: String
password: String!
): createAccountResult!
}
`;
export default {
Mutation: {
createAccount: (
_,
{username, email, name, location, avatarURL, githubUsername,password}
) => {
console.log(
username,
email,
name,
location,
avatarURL,
githubUsername
);
},
},
};
User type과 createAccount type, resolver을 다 만들고 실행시켜보면
이러한 에러가 뜬다, Query 타입이 필수적으로 필요한가 싶어
type Query {
seeUser(username: String!): createAccountResult
}
//##################################
Query: {
seeUser: (_, {username}) => {
return;
},
},
의 코드를 넣어주었고 , 정상 작동 하는 것을 볼 수 있었다
Mutation 을 보내고 로그가 잘 찍히는 것을 볼 수 있었다.
$npm i bcrypt
비밀번호 해쉬화 하기 전에 prisma에 유니크 값으로 저장한 email과 username이 중복인지 확인해야한다.
const existingUser = await client.user.findFirst({
where: {
OR: [{email}, {username}],
},
});
import bcrypt from "bcrypt";
const hashedPWD = await bcrypt.hash(password, 10);
bcrypt 패키지가 너무 잘 되어 있어서 우리는 bcrypt.hash(해쉬할 데이터, SORT) 만 써주면 된다
SORT 는 해쉬화를 몇번 할 지다, 3이면 입력한 비밀번호를 해쉬화 하고 해쉬화 된 것을 또 해쉬하는 것이다.
Mutation 을 보내주고
$ npx prisma studio
studio 를 켜서 보면
해쉬화 한 비밀번호까지 잘 저장된 것을 볼 수 있다 :)