Django - лучший способ обновить сводную таблицу статистики на основе входящих данных API - PullRequest
0 голосов
/ 22 апреля 2020

Справочная информация:

У меня есть проект Django, который использует restful api для отправки пользовательских данных. Эти данные поступают с нескольких разных устройств и состоят из имени игрока и оценки. Ниже приведена версия моделей.

class User(models.Model):
    full_name = models.TextField(null=True, blank=True)
    device = models.TextField(null=True, blank=True)

class Score(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="scores")
    score = models.CharField(max_length=64, blank=True, null=True)
    timestamp = models.DateTimeField(null=True)

Теперь я хочу, чтобы сайт вычислял некоторые сводные статистические данные пользователей на основе оценок и сохранял их в другой таблице, на которую я могу ссылаться в другом месте на сайте. Это будет называться что-то вроде UserStats и содержит данные, которые нельзя просто агрегировать, запрашивая результаты. Такие вещи, как количество игр, которые потребуют обработки через счета.

class UserStats(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="stats")
    number_of_games = models.IntegerField(default=0)

Вопрос:

Мой вопрос заключается в том, как лучше всего обрабатывать входящие Результаты на сервере? По сути, как только появляется новый счет, я хочу обработать его и обновить поля в модели UserStats.

Методы, которые мне известны:

  • Добавить код к оценка API. Поэтому при отправке баллов он проверяет модель UserStats и создает или обновляет ее.

  • устанавливает фоновую задачу, которая проверяет наличие новых баллов, и обновляет модель UserStats. Потенциально это может включать добавление поля к оценкам, чтобы показать, было ли оно обработано или нет.

Если у кого-то есть какие-либо другие методы или примеры решений аналогичной проблемы, которые были бы намного оценили.

...