Skip to main content

Intro

Ивенты

Все изменения состояния инбокса игрока изменяются через ивент.

topic: player.messages
export default {
name: 'MessageCreated',
scheme: avro.Type.forSchema({
type: 'record',
namespace: 'message',
name: 'Created',
fields: [
{
name: 'uuid',
type: 'string',
},
{
name: 'player_uuid',
type: 'string',
},
{
name: 'sender_uuid',
type: 'string',
},
{
name: 'available_at',
type: {type: 'long', logicalType: 'date'},
},
{
name: 'expires_at',
type: {type: 'long', logicalType: 'date'},
},
{
name: 'title',
type: 'string',
},
{
name: 'content',
type: 'string',
},
{
name: 'action_image',
type: {
type: 'enum',
name: 'action_image',
symbols: ['GIFT', 'INFORMATION', 'WELCOME'],
},
},
{
name: 'button_title',
type: 'string',
},
{
name: 'button_action',
type: {
type: 'enum',
name: 'button_action',
symbols: ['CASHBOX', 'SUPPORT_CHAT'],
},
},
{
name: 'status',
type: {
type: 'enum',
name: 'status',
symbols: ['SENT', 'DELIVERED', 'READ', 'EXPIRED'],
},
},
{
name: 'created_at',
type: {type: 'long', logicalType: 'date'},
},
{
name: 'timestamp',
type: {type: 'long', logicalType: 'date'},
},
{
name: 'event_version',
type: 'int',
},
],
}),
};
topic: player.messages
export default {
name: 'MessageStatusChange',
scheme: avro.Type.forSchema({
type: 'record',
namespace: 'message.status',
name: 'Change',
fields: [
{
name: 'uuid',
type: 'string',
},
{
name: 'status',
type: {
type: 'enum',
name: 'status',
symbols: ['SENT', 'DELIVERED', 'READ', 'EXPIRED'],
},
},
{
name: 'read_at',
type: ['null', {type: 'long', logicalType: 'date'}],
default: null,
},
{
name: 'delivered_at',
type: ['null', {type: 'long', logicalType: 'date'}],
default: null,
},
{
name: 'timestamp',
type: {type: 'long', logicalType: 'date'},
},
{
name: 'event_version',
type: 'int',
},
],
}),
};

MessageCreated MessageStatusChanged

Репрезентация

Для репрезентации в сервисе меседжей используется postgresql.

Модель
model Message {
uuid String @id @unique @db.Uuid
type MessageType @default(PERSONAL)
player_uuid String @db.Uuid
sender_uuid String @db.Uuid
available_at DateTime? @default(now())
expires_at DateTime
title String
content String
action_image ActionImage
button_title String
button_action ButtonAction
read_at DateTime?
delivered_at DateTime?
status MessageStatus @default(SENT)
created_at DateTime? @default(now())
}

enum ActionImage {
GIFT
INFORMATION
WELCOME
}

enum ButtonAction {
CASHBOX
SUPPORT_CHAT
}

enum MessageType {
PERSONAL
TRANSACTIONAL
INFORMATION
}

enum MessageStatus {
SENT
DELIVERED
READ
EXPIRED
}

Аутентификация

Атентификация используется стандартная, через JWT. Для менеджерского доступа используется JWT из admin_auth в котором есть необходимые скоупы.

jwt payload
{
...
"scope": ["favorite_games.all"],
...
}
permissions:
favorite_games:
all: 'service.favorite_games.*'