/*
Сервис RFID ключей устройства
*/
syntax = "proto3";
package deviceapis.device.v1;
import "deviceapis/device/v1/deviceapis_device_common_v1.proto";
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/wrappers.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Deviceapis.Device.V1";
option go_package = "/deviceapis_device_v1";
option java_multiple_files = false;
option java_outer_classname = "DeviceapisDeviceV1Proto";
option java_package = "ru.deviceapis.device.v1";
option java_string_check_utf8 = true;
option objc_class_prefix = "DEVICEAPISDEVICEV1";
option optimize_for = LITE_RUNTIME;
option php_namespace = "Deviceapis\\Device\\V1";
option ruby_package = "Deviceapis::Device::V1";
// Сервис RFID ключей устройства
service RfidService {
    // Метод удаления единичной сущности Rfid по ключу
    rpc DeleteRfid ( DeleteRfidRequest ) returns ( DeleteRfidResponse ) {
        option (google.api.http) = { delete: "/device/api/v1/rfid/{id}" };
    }
    // Метод удаления списка сущностей Rfid по фильтру
    rpc DeleteRfidList ( DeleteRfidListRequest ) returns ( DeleteRfidListResponse ) {
        option (google.api.http) = { delete: "/device/api/v1/rfid/list" };
    }
    // Метод получения единичной сущности Rfid по ключу
    rpc GetRfid ( GetRfidRequest ) returns ( GetRfidResponse ) {
        option (google.api.http) = { get: "/device/api/v1/rfid/{id}" };
    }
    // Метод получения количества сущностей Rfid по фильтру
    rpc GetRfidCount ( GetRfidCountRequest ) returns ( GetRfidCountResponse ) {
        option (google.api.http) = { get: "/device/api/v1/rfid/count" };
    }
    // Метод получения списка сущностей Rfid по фильтру
    rpc GetRfidList ( GetRfidListRequest ) returns ( GetRfidListResponse ) {
        option (google.api.http) = { get: "/device/api/v1/rfid/list" };
    }
    // Метод создания и редактирования сущности Rfid
    rpc SaveRfid ( SaveRfidRequest ) returns ( SaveRfidResponse ) {
        option (google.api.http) = { post: "/device/api/v1/rfid", body: "*" };
    }
    // Метод создания и редактирования списка сущностей Rfid
    rpc SaveRfidList ( SaveRfidListRequest ) returns ( SaveRfidListResponse ) {
        option (google.api.http) = { post: "/device/api/v1/rfid/list", body: "*" };
    }
}
// Запрос удаления списка сущностей Rfid по фильтру
message DeleteRfidListRequest {
}
// Ответ на запрос удаления списка сущностей Rfid по фильтру
message DeleteRfidListResponse {
    // Тип ответа
    oneof type {
        // Всего количество удаленных
        int32 data = 1;
    }
}
// Запрос удаления единичной сущности Rfid по ключу
message DeleteRfidRequest {
    // Идентификатор UID [hex 14]
    string id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос удаления единичной сущности Rfid по ключу
message DeleteRfidResponse {
    // Ошибка запроса
    message Error {
        // Причина ошибки
        oneof reason {
            // Ошибка валидации
            ValidationError validation = 1;
        }
    }
    // Тип ответа
    oneof type {
        // Ошибка
        Error error = 1;
    }
}
// Запрос получения количества сущностей Rfid по фильтру
message GetRfidCountRequest {
    // Фильтр ключей RFID.
    // При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ
    RfidFilter filter = 1;
}
// Ответ на запрос получения количества сущностей Rfid по фильтру
message GetRfidCountResponse {
    // Тип ответа
    oneof type {
        // Всего количество
        int32 data = 1;
    }
}
// Запрос получения списка сущностей Rfid по фильтру
message GetRfidListRequest {
    // Вариант разбиения на страницы
    oneof pagination {
        // Постраничный вывод
        RfidPaging paging = 1;
    }
    // Фильтр ключей RFID.
    // При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ
    RfidFilter filter = 2;
}
// Ответ на запрос получения списка сущностей Rfid по фильтру
message GetRfidListResponse {
    // Список Rfid
    repeated Rfid data = 1;
}
// Запрос получения единичной сущности Rfid по ключу
message GetRfidRequest {
    // Идентификатор UID [hex 14]
    string id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос получения единичной сущности Rfid по ключу
message GetRfidResponse {
    // Тип ответа
    oneof type {
        // Ключ
        Rfid data = 1;
    }
}
// Ключ
message Rfid {
    // Ошибка запроса создания ключа
    message SavingError {
        // Реле не найдено
        message RelayNotFound {
        }
        // Причина ошибки
        oneof reason {
            // Реле не найдено
            RelayNotFound relay_not_found = 1;
        }
    }
    // Идентификатор UID [hex 14]
    string id = 1 [(google.api.field_behavior) = REQUIRED];
    // Описание
    google.protobuf.StringValue description = 2;
    // Секрет [hex 14]
    google.protobuf.StringValue secret = 3;
    // Идентификаторы реле.
    // Диапазон: 1..64
    repeated int32 relay_indexes = 4;
}
// Фильтр ключей RFID.
// При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ
message RfidFilter {
    // По идентификаторам реле.
    // Диапазон: 1..64
    repeated int32 relay_indexes = 1;
}
// Постраничный вывод
message RfidPaging {
    // Количество записей на страницу.
    // Если значение 0 (не передано), то будет взято значение по умолчанию.
    // # Диапазон: 0..100.
    // # По умолчанию: 20
    int32 limit = 1;
    // Сдвиг.
    // # Диапазон: 0..2147483647
    int32 offset = 2;
}
// Запрос на редактирование списка сущностей Rfid
message SaveRfidListRequest {
    // Список Rfid
    repeated Rfid data = 1;
}
// Ответ на запрос на редактирование списка сущностей Rfid
message SaveRfidListResponse {
    // Ошибка запроса
    message Error {
        // Идентификатор UID [hex 14]
        string id = 1 [(google.api.field_behavior) = REQUIRED];
        // Причина ошибки
        oneof reason {
            // Ошибка валидации
            ValidationError validation = 2;
            // Ошибка сохранения
            Rfid.SavingError saving = 3;
        }
    }
    // Список Rfid
    repeated Rfid data = 1;
    // Список ошибок
    repeated Error errors = 2;
}
// Запрос на создания/редактирование сущности Rfid
message SaveRfidRequest {
    // Ключ
    Rfid data = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос на создания/редактирование сущности Rfid
message SaveRfidResponse {
    // Ошибка запроса
    message Error {
        // Причина ошибки
        oneof reason {
            // Ошибка валидации
            ValidationError validation = 1;
            // Ошибка сохранения
            Rfid.SavingError saving = 2;
        }
    }
    // Тип ответа
    oneof type {
        // Ключ
        Rfid data = 1;
        // Ошибка
        Error error = 2;
    }
}
