Я пытаюсь создать приложение React для подсчета средних очков, набранных баскетбольной командой Raptors в последних N домашних играх.
Предполагая, что я использую fetch (url) в методе componentDidMount, и я знаю, как составить список очков Raptors, когда они являются домашней командой:
componentDidMount() {
let url = "http://localhost:4000/games?homeTeam=Raptors"
fetch(url)
.then(resp => resp.json())
.then(data => {
let myGames = data.map((game, index) => {
return (
<div key={index}>
<h3>{game.homeTeamScore}</h3>
</div>
)
})
this.setState({myGames: myGames});
})
}
и это ответ JSON для http://localhost:4000/games (я использую json-сервер, чтобы высмеивать ответ API, как если бы это был ответ noSQL Firebase)
"games": [{
"id": 1,
"date": "2019-05-21",
"homeTeam": "Raptors",
"awayTeam": "Bucks",
"homeTeamPoints": 102,
"awayTeamPoints": 110,
},
{
"id": 2,
"date": "2019-05-20",
"homeTeam": "Lakers",
"awayTeam": "Bucks",
"homeTeamPoints": 102,
"awayTeamPoints": 110,
},
{
"id": 3,
"date": "2019-05-19",
"homeTeam": "Raptors",
"awayTeam": "Warriors",
"homeTeamPoints": 102,
"awayTeamPoints": 110,
}, ... and so on
],
Каков наилучший способ для меня получить среднее количество очков Raptors, набранных в их последних 10 домашних играх на сегодняшний день? Что делать, если я хочу, чтобы последние 12 домашних игр предшествовали определенной дате (т. Е. 2 апреля 2019 г.)
Некоторые варианты, которые я могу придумать, но не знаю, какой подход лучше:
- Вернуть все домашние игры Raptors, сопоставить только те игры, которые мне интересны, и затем рассчитать среднее значение, используя javascript на стороне клиента.
Минусами этого является то, что если я хочу получить среднее из последних 1000 очков домашней игры Raptors. Это не кажется эффективным, особенно если мне нужен только определенный диапазон дат.
- Создайте ресурс API, который позволит мне указать дату начала и количество игр. API будет возвращать баллы Raptors только за N игр до этой даты. Это может выглядеть примерно так: http://localhost.com/teams/raptors/homeGames?sinceDate=20190402&numberGames=20
Минусами этого является то, что я пытаюсь использовать Firebase, и я не уверен, что этот ресурс API - это то, что может сделать Firebase, потому что я не думаю, что Firebase позволяет передавать ему параметры для указания даты начала или количество игр. Кроме того, если бы у меня были / команды / рапторы, мне пришлось бы иметь дубликаты записей для игр в / команды / [противник команды]
Какой лучший способ структурировать эти данные? Должен ли я делать агрегирование и усреднение на стороне клиента? Могу ли я что-то сделать с облачными функциями Google, чтобы включить больше логики на стороне сервера?
Правильный ответ будет выбран на основе того, что проще всего реализовать для новичка в React и Firebase, при этом выполняя требования, указанные выше.