This message was deleted.
# 질문
s
This message was deleted.
t
저는 B하고 있는데 C로 넘어가시는 이유가 있으세요??
h
뮤테이션은 뷰일관성을 보장하도록 정보를 리턴하셔야 합니다.
단순히 응답결과의 인코딩된 코드를 반환하고 뷰에서 해석하는게 아니라요
e
mutation이 하나의 리소스만 수정하지 않는 경우가 보이더군요. addPepople이지만 team 관련 리소스도 업데이트 된다던가
t
아하 그럼 C가 좋겠네요 ㅋㅋ
e
그래서 막 혼합하는것 보다는 C로 통일하는게 좋지 않을까 생각했거든요.
github같은경우 clientMutationId 를 기본적으로 반환 하던데 이거보니 result가 의미있을까 생각도 들고
이런 저런 생각이 썪이고 있네요 ㅎㅎ
query가 뷰의 일관성을 보장하는건 이해가는데 mutation도 유지되어야하나요?
h
Copy code
mutation AddPeople(input: ...) {
  # 응답 코드같은게 필요하면 스칼라 타입으로 넣습니다.
  result

  person # 생성된 User... 당연히 필요할거구요

  # 중요한 건 실제 뷰를 mutate 해야 한다는 점입니다.
  # 가령 말씀하신대로 팀 관련 정보가 업데이트 된다고 치면 업데이트 될 팀을 넘겨줘야 합니다.
  team
}
뮤테이션이 왜 “뮤테이션“으로 이름지어 졌는가는 클라이언트 관점에서 생각하셔야 합니다. 해당 뮤테이션이 mutate 하는 건 클라이언트 (화면) 에서 의존하는 어떠어떠한 부분이다 라는걸 선언해주시면 graphql client 가 해당 부분을 찾아 레코드를 업데이트 하는거에요. ID 스칼라도 해당 부분을 식별하기 위해 있는거구요
👍 1
사용자 코드로 updater 를 짜넣는건 리스트 뮤테이션 같은 몇 예외 상황을 위해 있는 겁니다.
t
핵심이죠 ㅎㅎ
h
뷰 프래그먼트 쓰시면 해당 프래그먼트는 쿼리에만 들어가는게 아니라 뮤테이션에도 그대로 들어갑니다
e
아 말하신 뷰의 일관성은 제 질문 같은 경우 addPeople: People에서 보장하라는 이야기시죠?
h
예를들면 제가 제품에서 쓰는 뮤테이션 중 하나는 이런식으로 생겼습니다.
Copy code
mutation CreateDayOffForm(input: {
  ...
}) {
  dayOffForm: createDayOffForm(input: {
    ...
  }) {
    id
    # 폼 의존성 업데이트
    ...DayOffForm_subject
    user {
      id
      dayOffCount(year: $year) {
        ...DayOffCountCardContainer_dayOffCount
      }
      workReport(input: {
        ...
      }) {
        # 근무 리포트 - 근무시간차트 의존성 업데이트
        ...MonthlyWorkReport_WorkTimeChart
      }
      workData(input: {
        ...
      }) {
        # 월간 캘린더 - 휴가 등록 가능한 날짜 별 행 업데이트
        ...WorkCalendarCard_dailyAggregationSource
        dailyAggregation @client {
          ...WorkCalendarCard_HalfDayOffDayRow
          ...WorkCalendarCard_FullDayOffDayRow
        }
  
        # 주간 캘린더 - 스케줄 업데이트
        ...WorkCalendarCard_schedulesSource
        schedules @client {
          ...WorkCalendarCard_WeeklyCalendar_dayOffSchedule
        }
      }
    }
  }
}
e
같이 people이라고 써소 답변이 Person 이라고 해야하려나
이해 되었네요. 감사합니다
h
핵심은 유저코드로 받을 값을 명시하는 것이 아니라(물론 가능합니다. 필요하면 쓰시면 됨..) graphql engine 에게 값이 변경되었음을 알려야할 레코드를 명시하는 것이 중요하다 (뷰 일관성 보장, 일관성 필요 없으면 안쓰셔도 됨)
e
네 그부분까지는 고민 못했는데 이번에 알게되었네요 감사합니다
h
저 clientMutationId 는 custom updater 다루기 편하라고 일관적으로 넣어주는 것 같아요
주로 리스트 업데이트나 레코드 삭제 같은 것들이 해당될 듯 하네요
👍 1