Допустим, есть запрос, который выглядит примерно так:
Запрос{
player(steamAccountId: 12345) {
steamAccountId,
matches(request: {
take: 20
}) {
id
startDateTime
durationSeconds
lobbyType
didRadiantWin
gameMode
bracket
players {
steamAccount {
id
timeCreated
dotaAccountLevel
isAnonymous
seasonRank
smurfFlag
}
hero {
id
displayName
shortName
}
isRadiant
isVictory
kills
deaths
assists
goldPerMinute
experiencePerMinute
networth
level
heroDamage
towerDamage
position
lane
intentionalFeeding
}
}
}
}
Сейчас у меня это просто строка, в которую я могу, например, через ${value} вставить какое-то значение в нужное мне место. Например, в take передать не 20, а 50 и т.д.
Но что если мне например не надо take, а надо условные startDate и endDate вместо него? Т.е. выбрать в интервале. Не особо понимаю, как бы это реализовать аккуратно. Видится, что сам запрос должен быть чем-то вроде класса-строителя. Типа есть какая-то база запроса (например, поля данных мне нужны всегда одинаковые), а есть конфигурируемая часть, которую можно настраивать методами, вроде builder.startDate(sd).endDate(ed).build(). Но как реализовать каркас запроса? К строке лепить как будто не удобно, потому что если допустить, что конфигурируемости подвергаются разные части запроса, то если мы вызовем метод, который добавляет что-то к концу строки, а потом вызовем метод, который конфигурирует что-то из начала строки, то определять, куда именно надо вставлять параметр, будет сложно.
В общем, подскажите как это все по best-practice сделать.