Categorygithub.com/and-gorbik/dynamodb-device-token
module
0.0.0-20250117132744-ebaed3f674d3
Repository: https://github.com/and-gorbik/dynamodb-device-token.git
Documentation: pkg.go.dev

# README

dynamodb-device-token

Используемые фичи

  • поддержка нескольких девайсов у одного пользователя (девайсы различаются по device_model)
  • TTL на записи в таблице
  • Streams для межрегиональной репликации (- DAX для кеширования)

Модель данных

device:

  • PartitionKey(user_id int64)
  • SortKey(kind, device_model string) или SortKey("latest_device")
  • modified_at int64
  • token string
  • app_version string
  • locale string
  • ttl int64

Device model нужен в ключе, чтобы поддержать фичу мультидевайс

Проблемы:

  • Для однозначного определения токена нужно знать device_model. В текущей реализации мы знаем device model только во время UpdateUserData. Для SendPush придется вытаскивать токены по user_id и kind (при помощи фильтра begins_with), после чего брать последний по modified_at (на стороне бека).
  • При апдейте локали тоже нужно знать device model (сейчас видимо баг)

Примеры cli команд

Создать БД

go run ./cmd/db-manager --command create

Удалить БД

go run ./cmd/db-manager --command delete

Заполнить таблицу значениями

Таблица заполняется значениями из файла records.json.

go run ./cmd/db-manager --command apply

Включить стрим

go run ./cmd/db-manager --command enable-stream

возвращает stream id

Добавить элемент

go run ./cmd/api --command put --data '{"user_id": 10, "modified_at": 12345, "kind": "android_general", "device_model": "redmi note 5", "token": "AAA-BBB-CCC-DDDEF", "app_version": "", "locale": "ru"}'

Добавить элемент и отметить его последним

go run ./cmd/api --command put --data '{"user_id": 10, "modified_at": 12345, "kind": "android_general", "device_model": "redmi note 5", "token": "AAA-BBB-CCC-DDDEF", "app_version": "", "locale": "ru", "latest": true}'

Получить несколько записей

go run ./cmd/api --command get --pk 1 --sort 'ios_general'

Удалить одну запись

go run ./cmd/api --command delete --pk 1 --sort 'ios_general#iphone 13'

Добавить реплику в другой регион

go run ./cmd/db-manager --command make-global-table --region us-east-1 --replica-region eu-central-1

Запуск в Docker

docker run -it --rm --name dynamodb-local -p 8000:8000 amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb
npm install -g dynamodb-admin
dynamodb-admin

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author