[Prisma] custom/computed field

Review/백엔드 - 인스타그램 클론

[Prisma] custom/computed field

조커린 2020. 2. 15. 03:42

데이터 베이스엔 없어도 예를 들면 firstName 과 lastName이 합쳐진 fullName 이라는 데이터 필드를 만들고 싶을 때

(다른 필드와는 관계없이 독자적인 필드)

custom field/ computed field 라는 것을 만든다. 

 

기존의 me.js

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { prisma } from "../../../../generated/prisma-client";
 
export default {
  Query: {
    me: async (_, __, { request, isAuthenticated }) => {
 
      isAuthenticated(request);
      const { user } = request;
      const userProfile = await prisma.user({ id: user.id });
      const posts = await prisma.user({ id: user.id }).posts();
      return {
        user: userProfile,
        posts
      };
    }
  },
  User: {
    fullName: parent => {
      return `${parent.firstName} ${parent.lastName}`;
    }
    // 여기서 parent는 상위 resolver , user를 받는다.
  }
}; 
cs

여기서 User란은

이 resolver에 스키마를 따로 작성해주지 않아도 기존에 있던 user 내부에서 서버에서 찾은 다음 없으면 돌아갈 수 있도록 만들어준 것이다. 

 

그래서 따로 computed.js를 만들어서 따로 관리를 해주도록 한다. 

 

1
2
3
4
5
6
7
8
9
10
import { prisma } from "../../../generated/prisma-client";
 
export default {
    User: {
        fullName: parent => {
         return `${parent.firstName} ${parent.lastName}`;
        },
    }
   
}
cs

 

 

관련 공식 문서는 하단을 읽어보도록 함

https://www.prisma.io/tutorials/a-guide-to-common-resolver-patterns-ct08/#scenario:-add-a-custom/computed-field-to-a-prisma-model-via-the-application-schema-prisma-bindings