Skip to content
Snippets Groups Projects
mailbox.proto 2.41 KiB
syntax = "proto3";

import "google/protobuf/empty.proto";
import "common/common.proto";
import "google/protobuf/timestamp.proto";

option go_package = "git.perx.ru/perxis/perxis-go/api/mailbox;mailbox";

package perxis.mailbox;

// Сообщение для уведомления
message Message {
  string id = 1; // Уникальный идентификатор уведомления
  string object_id = 2; // Идентификатор объекта события
  string from =  3; // Идентификатор отправителя пользователя/сервиса/подсистемы
  string to = 4; // Идентификатор получателя пользователя/сервиса/подсистемы

  string title = 5; // Заголовок уведомления
  string message = 6; // Текст уведомления
  google.protobuf.Timestamp created_at = 7; // Время создания
  bool is_read = 8; // Статус прочтения
}

// Отправить уведомление
message SendMessageRequest {
  repeated string to = 1; // список получателей пользователей/сервисов/подсистем
  Message message = 2;
}

// Запрос на получение уведомлений
message ListMessageRequest {
  FindOptions options = 10;
}

// Ответ на получение уведомлений
message ListMessageResponse {
  repeated Message message = 1;
}

// Пометка уведомлений как прочитанных
message MarkMessagesRequest {
  bool unread = 1; // Установить статус сообщения не/прочитано
  FindOptions options = 10;
}


message FindOptions {
  string recipient = 1;
  repeated string message_ids = 3;
  google.protobuf.Timestamp after = 4;
  google.protobuf.Timestamp before = 5;
  optional bool unread = 6;
  common.FindOptions options = 10;
}


// Сервис уведомлений
service Mailbox {

  // Отправка уведомления
  rpc Send(SendMessageRequest) returns(google.protobuf.Empty) {};

  // Получение уведомлений, поле to в Message всегда содержит только получателя из запроса
  rpc List(ListMessageRequest) returns(ListMessageResponse);

  // Пометка уведомлений как прочитанных
  rpc MarkAsRead(MarkMessagesRequest) returns(google.protobuf.Empty) {};
}