parallel-p / thehat

Mobile application for the game «The Hat»
9 stars 1 forks source link

Add Per-User properties #36

Closed denspb closed 10 years ago

denspb commented 10 years ago

Нам нужен API для поддержки свойств, связаных с пользователем. Такие свойства можно поделить на категории: 1) Не зависящие от устройства Пример: настройки приватности, имя пользователя. 2) свои для каждого устройства, доступны всем устройствам данного пользователя Пример: id игрока-владельца устройства. Нужен чтобы в сетевой игре не предлагать на вторичном устройстве добавить владельца, если он уже есть в игре. 3) свои для каждого устройства, недоступные остальным устройствам. Пример: ключ устройства в Google Cloud Messaging.

nzinov commented 10 years ago

Можно посмотреть, что есть сейчас в objects/user_devices.py. Во-первых объект User: в него можно добавлять поля 1-го типа. Во-вторых объект Device: в него можно добавлять поля 2-го и 3-го типа. А мы хотим как-то принудительно разделить 2-й и 3-й тип?

denspb commented 10 years ago

Тут в первую очередь важен API, отдаваемый наружу, а не точное место хранения. 2 и 3 тип точно хотим разделить, в целях безопасности. 2 должен отдаваться всем устройствам, 3 должен только передаваться от устройства серверу.

nzinov commented 10 years ago

Я не очень понимаю что имеется в виду. Сделать какие-нибудь свойства и методы API доступа к ним?

denspb commented 10 years ago

Да. 1 - это словарь ключ-значение, 2 и 3 - словари deviceid-ключ-значение. все значения можно считать строками. Количество данных невелико, так что достаточно в API иметь 1) Получение всех значений 2) Проверка наличия каких-либо изменений. 3) Внесение изменений.

i-pavlov commented 10 years ago

Сделал 1, 3 категории. Для 1 категории: Есть 4 метода: /api/user/get/all - получение всех значений, для данного device_id, user_id /api/user/update - обновление. (при одинаковых ключах данные перезаписываются) /api/user/delete - удаление ключа /api/user/version - получение текущей версии, для данного device_id, user_id

Аналогично, для третьей, только user надо заменить на this_device. Первая хранится в User, вторая в Device.

Но я не понимаю, зачем нужно 2 и 3 категорию, разносить по разным объектам?

denspb commented 10 years ago

Спасибо. А можешь ещё описать формат данных? Предлагаю чуть-чуть поменять URL'ы: /api/settings/NNN/operation, где NNN = user, devices, device.

Для 2 и 3 нужны разные категории в API потому, что некоторые значения, добавленные устройством A должны стать доступны устройству B (например, id владельца), а некоторые - нет (Google Cloud Messaging ID). Хранить все три можно в одной таблице, главное чтобы они были разнесены в API.

i-pavlov commented 10 years ago

Ок. Формат данных опишу, когда закончу и напишу тесты.

i-pavlov commented 10 years ago

https://github.com/parallel-p/thehat/wiki/Per-User-properties-API

Описал формат данных. Возможно, стоит что-то доработать.

denspb commented 10 years ago

Угу. Единственное, с точки зрения безопасности, я бы для Per-device значений (2 и 3) в запросах на обновление/удаление делал бы не словарь deviceid->key->value, а посто key->value, а deviceid брал бы из запроса. То есть устройство A не должно иметь возможность менять значения для устройства B, только свои.

i-pavlov commented 10 years ago

Обновил