프론트엔드에서 동일한 쿼리를 조건과 fragment 만 다르게 요청했을때 1개의 조건만 적용해서 동일한 결과물로 준다.
이때 아래 처럼 name을 가져와서 개별 처리 할 수 있도록 한다.
query GetUsersByDateRange($startDate7Days: String!, $endDate7Days: String!, $startDate30Days: String!, $endDate30Days: String!) {
usersFor7Days: users(dateRange: { startDate: $startDate7Days, endDate: $endDate7Days }) {
...Last7DaysInfo
}
usersFor30Days: users(dateRange: { startDate: $startDate30Days, endDate: $endDate30Days }) {
...Last30DaysInfo
}
}
fragment Last7DaysInfo on User {
id
name
email
createdAt
}
fragment Last30DaysInfo on User {
id
name
email
createdAt
lastLogin
}
{
"startDate7Days": "2024-12-16",
"endDate7Days": "2024-12-23",
"startDate30Days": "2024-11-23",
"endDate30Days": "2024-12-23"
}
fun user(
dfe: DgsDataFetchingEnvironment,
): CompletableFuture<User> {
// fragment 이름을 가져와서 구분한다.
val fragment = dfe.field.alias ?: dfe.field.name
// ...
위에 방법은 fragment 를 사용하는 경우고 사용안하는 경우가 있어 다른 방법을 고민이 필요하다.