Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Реализовать GET /api/chats/:id/stupid_achievments/:name #179

Open
qelphybox opened this issue Jan 4, 2021 · 2 comments
Open

Comments

@qelphybox
Copy link
Owner

GET /api/chats/:id/stupid_achievments/:name?range_type=24h - Возвращает статистку юзера

Параметры могут быть:

  • ?range_type=24h - отдать стат за последние 24 часа (Дефолтный range_type)
  • ?range_type=week - отдать за неделю (аналогично ачивке недельного философа)
  • ?range_type=month - отдать стат за последний месяц (аналогично ачивке недельного философа только за месяц, то есть находим первый день месяца и пляшем от него)
  • ?range_type=custom&range=2020-01-04_2020-01-06 - отдаем с начала дня старта периода, до конца дня конца периода включительно. Период надо провалидировать начало не должно быть позже конца.

Олгоритм:

  1. Валидируем данные сессии (https://core.telegram.org/widgets/login#checking-authorization)
  2. Валидируем параметры range_type один из (24h, week, month, custom), и если custom то надо проверить что есть range и что он правильный
  3. Получить данные для ответа:
    1. В сессии у нас есть данные id, first_name, last_name, username, photo_url, auth_date, hash забираем id. Это id телеграм юзера.
    2. Нужно проверить что юзер состоит в чате из запроса. Если нет, валим 404 ошибку.
    3. Если все ок, данные по чату собираем, формируем ответ.

Ответы:

  1. Если все валидно:
    200 OK
    {
      "status": "ok",
      "stupid_achievment": {
        "name": "messages_count",
        "data": [
          { "username": "Alexey Miroslavich", "value": 132 },
          { "username": "Dani Hood", "value": 121 }
        ]
      } 
    }
  2. Если chats/:id или stupid_achievments/:name несуществует или юзер не состоит в таком чате, отдаем
    404 Not Found
    {
      "status": "error",
      "message": "Can not find chat '12332'"
    }
    или
    {
      "status": "error",
      "message": "Can not find stupid achievment 'asdf'"
    }
  3. Если параметры не валидны, отдаем
    Если например ?range_type=asdf&range=2020-01-06_2020-01-04
    400 Bad request
    {
      "status": "error",
      "message": "Wrong 'range_type=asdf', please try one of 24h, week, month, custom"
    }
    Или если ?range_type=custom&range=2020-01-06_2020-01-04
    400 Bad request
    {
      "status": "error",
      "message": "Wrong 'range=2020-01-06_2020-01-04', the beginning must be no later than the end"
    }
  4. Если сессия невалидна, отдаем
    403 Forbidden
    {
      "status": "forbidden",
      "message": "Session is invalid, please sign in"
    }
    
@qelphybox
Copy link
Owner Author

@AlexanderMalikh возьмешь?

@AlexanderMalikh
Copy link

беру

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants