Skip to content

API Reference

onoll.proto

syntax = "proto3";
package proto;

import "google/api/annotations.proto";
import "protoc-gen-swagger/options/annotations.proto";

option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
    host: "onocontroller:7576"
    base_path: "/grpc"
};

option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger).info = {
    title: "ONO"
    description: "ONO Lean Logistics REST API"
    version: "x.y.z"
};

// Conventions
//  + Append 'Packet' to stream messages
//  + Prepend one of these for data-centric requests: 'Create', 'Get', 'Update', 'Delete'
//  + Use PascalCase while keeping the case for acronyms (eg: userID not userId, HTMLResponse not HtmlResponse)
//  + Define domain types here
//  + Define services in another file with an appropriate name
//  + Split procedures and messages to a more digestible organization

service OnoLL {
    rpc StoreDrawer (StoreDrawerRequest) returns (StoreDrawerResponse) {
    }
    rpc RequestDrawer (RequestDrawerRequest) returns (RequestDrawerResponse) {
    }
    rpc RequestCombo (stream RequestComboRequestPacket) returns (stream RequestComboResponsePacket) {
    }
    rpc PanicChannel (PanicChannelRequest) returns (stream PanicChannelResponsePacket) {
    }

    // =================================================================================================================

    rpc CreateDrawer (CreateDrawerRequest) returns (CreateDrawerResponse) {
        option (google.api.http) = {
            post: "/CreateDrawer"
            body: "*"
        };
    }
    rpc GetDrawerFromName (GetDrawerFromNameRequest) returns (GetDrawerFromNameResponse) {
        option (google.api.http) = {
            post: "/GetDrawerFromName"
            body: "*"
        };
    }
    rpc GetProductDrawer (GetProductDrawerRequest) returns (GetProductDrawerResponse) {
        option (google.api.http) = {
            post: "/GetProductDrawer"
            body: "*"
        };
    }
    rpc GetBayDrawer (GetBayDrawerRequest) returns (GetBayDrawerResponse) {
        option (google.api.http) = {
            post: "/GetBayDrawer"
            body: "*"
        };
    }
    rpc GetDrawers (GetDrawersRequest) returns (GetDrawersResponse) {
        option (google.api.http) = {
            post: "/GetDrawers"
            body: "*"
        };
    }
    rpc GetEmptyDrawers (GetEmptyDrawersRequest) returns (GetEmptyDrawersResponse) {
        option (google.api.http) = {
            post: "/GetEmptyDrawers"
            body: "*"
        };
    }
    rpc UpdateDrawer (UpdateDrawerRequest) returns (UpdateDrawerResponse) {
        option (google.api.http) = {
            post: "/UpdateDrawer"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateProduct (CreateProductRequest) returns (CreateProductResponse) {
        option (google.api.http) = {
            post: "/CreateProduct"
            body: "*"
        };
    }
    rpc GetProducts (GetProductsRequest) returns (GetProductsResponse) {
        option (google.api.http) = {
            post: "/GetProducts"
            body: "*"
        };
    }
    rpc GetProductTypeProducts (GetProductTypeProductsRequest) returns (GetProductTypeProductsResponse) {
        option (google.api.http) = {
            post: "/GetProductTypeProducts"
            body: "*"
        };
    }
    rpc GetDrawerProducts (GetDrawerProductsRequest) returns (GetDrawerProductsResponse) {
        option (google.api.http) = {
            post: "/GetDrawerProducts"
            body: "*"
        };
    }
    rpc UpdateProductQuantity (UpdateProductQuantityRequest) returns (UpdateProductQuantityResponse) {
        option (google.api.http) = {
            post: "/UpdateProductQuantity"
            body: "*"
        };
    }
    rpc UpdateProductMeta (UpdateProductMetaRequest) returns (UpdateProductMetaResponse) {
        option (google.api.http) = {
            post: "/UpdateProductMeta"
            body: "*"
        };
    }
    rpc UpdateProductPosition (UpdateProductPositionRequest) returns (UpdateProductPositionResponse) {
        option (google.api.http) = {
            post: "/UpdateProductPosition"
            body: "*"
        };
    }
    rpc DeleteProduct (DeleteProductRequest) returns (DeleteProductResponse) {
        option (google.api.http) = {
            post: "/DeleteProduct"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateProductType (CreateProductTypeRequest) returns (CreateProductTypeResponse) {
        option (google.api.http) = {
            post: "/CreateProductType"
            body: "*"
        };
    }
    rpc GetProductTypes (GetProductTypesRequest) returns (GetProductTypesResponse) {
        option (google.api.http) = {
            post: "/GetProductTypes"
            body: "*"
        };
    }
    rpc GetProductTypeFromCode (GetProductTypeFromCodeRequest) returns (GetProductTypeFromCodeResponse) {
        option (google.api.http) = {
            post: "/GetProductTypeFromCode"
            body: "*"
        };
    }
    rpc UpdateProductType (UpdateProductTypeRequest) returns (UpdateProductTypeResponse) {
        option (google.api.http) = {
            post: "/UpdateProductType"
            body: "*"
        };
    }
    rpc DeleteProductType (DeleteProductTypeRequest) returns (DeleteProductTypeResponse) {
        option (google.api.http) = {
            post: "/DeleteProductType"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateComboTemplate (CreateComboTemplateRequest) returns (CreateComboTemplateResponse) {
        option (google.api.http) = {
            post: "/CreateComboTemplate"
            body: "*"
        };
    }
    rpc GetComboTemplateFromID (GetComboTemplateFromIDRequest) returns (GetComboTemplateFromIDResponse) {
        option (google.api.http) = {
            post: "/GetComboTemplateFromID"
            body: "*"
        };
    }
    rpc GetComboTemplateFromName (GetComboTemplateFromNameRequest) returns (GetComboTemplateFromNameResponse) {
        option (google.api.http) = {
            post: "/GetComboTemplateFromName"
            body: "*"
        };
    }
    rpc UpdateComboTemplate (UpdateComboTemplateRequest) returns (UpdateComboTemplateResponse) {
        option (google.api.http) = {
            post: "/UpdateComboTemplate"
            body: "*"
        };
    }
    rpc DeleteComboTemplate (DeleteComboTemplateRequest) returns (DeleteComboTemplateResponse) {
        option (google.api.http) = {
            post: "/DeleteComboTemplate"
            body: "*"
        };
    }

    rpc CheckStockAvailability (CheckStockAvailabilityRequest) returns (CheckStockAvailabilityResponse) {
        option (google.api.http) = {
            post: "/CheckStockAvailability"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateComboSorter (CreateComboSorterRequest) returns (CreateComboSorterResponse) {
        option (google.api.http) = {
            post: "/CreateComboSorter"
            body: "*"
        };
    }
    rpc GetComboSorterFromID (GetComboSorterFromIDRequest) returns (GetComboSorterFromIDResponse) {
        option (google.api.http) = {
            post: "/GetComboSorterFromID"
            body: "*"
        };
    }
    rpc GetComboTemplateSorters (GetComboTemplateSortersRequest) returns (GetComboTemplateSortersResponse) {
        option (google.api.http) = {
            post: "/GetComboTemplateSorters"
            body: "*"
        };
    }
    rpc UpdateComboSorter (UpdateComboSorterRequest) returns (UpdateComboSorterResponse) {
        option (google.api.http) = {
            post: "/UpdateComboSorter"
            body: "*"
        };
    }
    rpc DeleteComboSorter (DeleteComboSorterRequest) returns (DeleteComboSorterResponse) {
        option (google.api.http) = {
            post: "/DeleteComboSorter"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateOperator (CreateOperatorRequest) returns (CreateOperatorResponse) {
        option (google.api.http) = {
            post: "/CreateOperator"
            body: "*"
        };
    }
    rpc GetOperatorFromEmail (GetOperatorFromEmailRequest) returns (GetOperatorFromEmailResponse) {
        option (google.api.http) = {
            post: "/GetOperatorFromEmail"
            body: "*"
        };
    }
    rpc UpdateOperator (UpdateOperatorRequest) returns (UpdateOperatorResponse) {
        option (google.api.http) = {
            post: "/UpdateOperator"
            body: "*"
        };
    }
    rpc DeleteOperator (DeleteOperatorRequest) returns (DeleteOperatorResponse) {
        option (google.api.http) = {
            post: "/DeleteOperator"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetImage (GetImageRequest) returns (GetImageResponse) {
        option (google.api.http) = {
            post: "/GetImage"
            body: "*"
        };
    }
    rpc GetImages (GetImagesRequest) returns (GetImagesResponse) {
        option (google.api.http) = {
            post: "/GetImages"
            body: "*"
        };
    }
    rpc UpdateImage (UpdateImageRequest) returns (UpdateImageResponse) {
        option (google.api.http) = {
            post: "/UpdateImage"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetProductType3DData (GetProductType3DDataRequest) returns (GetProductType3DDataResponse) {
        option (google.api.http) = {
            post: "/GetProductType3DData"
            body: "*"
        };
    }
    rpc UpdateProductType3DData (UpdateProductType3DDataRequest) returns (UpdateProductType3DDataResponse) {
        option (google.api.http) = {
            post: "/UpdateProductType3DData"
            body: "*"
        };
    }
    rpc RemoveProductType3DData (RemoveProductType3DDataRequest) returns (RemoveProductType3DDataResponse) {
        option (google.api.http) = {
            post: "/RemoveProductType3DData"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetEventsOfProductType (GetEventsOfProductTypeRequest) returns (GetEventsOfProductTypeResponse) {
        option (google.api.http) = {
            post: "/GetEventsOfProductType"
            body: "*"
        };
    }
    rpc GetEventsOfDrawer (GetEventsOfDrawerRequest) returns (GetEventsOfDrawerResponse) {
        option (google.api.http) = {
            post: "/GetEventsOfDrawer"
            body: "*"
        };
    }
    rpc GetEventsOfPlugin (GetEventsOfPluginRequest) returns (GetEventsOfPluginResponse) {
        option (google.api.http) = {
            post: "/GetEventsOfPlugin"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetRacks (GetRacksRequest) returns (GetRacksResponse) {
        option (google.api.http) = {
            post: "/GetRacks"
            body: "*"
        };
    }

    rpc GetRackFromBayID (GetRackFromBayIDRequest) returns (GetRackFromBayIDResponse) {
        option (google.api.http) = {
            post: "/GetRackFromBayID"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetAccessToken (GetAccessTokenRequest) returns (GetAccessTokenResponse) {
        option (google.api.http) = {
            post: "/GetAccessToken"
            body: "*"
        };
    }
    rpc GetFastLoginToken (GetFastLoginTokenRequest) returns (GetFastLoginTokenResponse) {
        option (google.api.http) = {
            post: "/GetFastLoginToken"
            body: "*"
        };
    }
    rpc GetRFIDToken (GetRFIDTokenRequest) returns (GetRFIDTokenResponse) {
        option (google.api.http) = {
            post: "/GetRFIDToken"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc Search (SearchRequest) returns (SearchResponse) {
        option (google.api.http) = {
            post: "/Search"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetOperatorPermissions (GetOperatorPermissionsRequest) returns (GetOperatorPermissionsResponse) {
        option (google.api.http) = {
            post: "/GetOperatorPermissions"
            body: "*"
        };
    }
    rpc UpdateOperatorPermission (UpdateOperatorPermissionRequest) returns (UpdateOperatorPermissionResponse) {
        option (google.api.http) = {
            post: "/UpdateOperatorPermission"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetSettings (GetSettingsRequest) returns (GetSettingsResponse) {
        option (google.api.http) = {
            post: "/GetSettings"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateDefaultMetaField (CreateDefaultMetaFieldRequest) returns (CreateDefaultMetaFieldResponse) {
        option (google.api.http) = {
            post: "/CreateDefaultMetaField"
            body: "*"
        };
    }
    rpc CreateDefaultMetaEnumField (CreateDefaultMetaEnumFieldRequest) returns (CreateDefaultMetaEnumFieldResponse) {
        option (google.api.http) = {
            post: "/CreateDefaultMetaEnumField"
            body: "*"
        };
    }
    rpc GetDefaultMetaFields (GetDefaultMetaFieldsRequest) returns (GetDefaultMetaFieldsResponse) {
        option (google.api.http) = {
            post: "/GetDefaultMetaFields"
            body: "*"
        };
    }
    rpc UpdateDefaultMetaField (UpdateDefaultMetaFieldRequest) returns (UpdateDefaultMetaFieldResponse) {
        option (google.api.http) = {
            post: "/UpdateDefaultMetaField"
            body: "*"
        };
    }
    rpc UpdateDefaultMetaEnumField (UpdateDefaultMetaEnumFieldRequest) returns (UpdateDefaultMetaEnumFieldResponse) {
        option (google.api.http) = {
            post: "/UpdateDefaultMetaEnumField"
            body: "*"
        };
    }
    rpc DeleteDefaultMetaField (DeleteDefaultMetaFieldRequest) returns (DeleteDefaultMetaFieldResponse) {
        option (google.api.http) = {
            post: "/DeleteDefaultMetaField"
            body: "*"
        };
    }
    rpc DeleteDefaultMetaEnumField (DeleteDefaultMetaEnumFieldRequest) returns (DeleteDefaultMetaEnumFieldResponse) {
        option (google.api.http) = {
            post: "/DeleteDefaultMetaEnumField"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc GetAnalytics (GetAnalyticsRequest) returns (GetAnalyticsResponse) {
        option (google.api.http) = {
            post: "/GetAnalytics"
            body: "*"
        };
    }
    rpc GetGraphData (GetGraphDataRequest) returns (GetGraphDataResponse) {
        option (google.api.http) = {
            post: "/GetGraphData"
            body: "*"
        };
    }
    rpc GetRackComposition (GetRackCompositionRequest) returns (GetRackCompositionResponse) {
        option (google.api.http) = {
            post: "/GetRackComposition"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc CreateMaintenanceTask (CreateMaintenanceTaskRequest) returns (CreateMaintenanceTaskResponse) {
        option (google.api.http) = {
            post: "/CreateMaintenanceTask"
            body: "*"
        };
    }
    rpc GetMaintenanceTasks (GetMaintenanceTasksRequest) returns (GetMaintenanceTasksResponse) {
        option (google.api.http) = {
            post: "/GetMaintenanceTasks"
            body: "*"
        };
    }
    rpc GetMaintenanceTaskFromID (GetMaintenanceTaskFromIDRequest) returns (GetMaintenanceTaskFromIDResponse) {
        option (google.api.http) = {
            post: "/GetMaintenanceTaskFromID"
            body: "*"
        };
    }
    rpc UpdateMaintenanceTask (UpdateMaintenanceTaskRequest) returns (UpdateMaintenanceTaskResponse) {
        option (google.api.http) = {
            post: "/UpdateMaintenanceTask"
            body: "*"
        };
    }
    rpc DeleteMaintenanceTask (DeleteMaintenanceTaskRequest) returns (DeleteMaintenanceTaskResponse) {
        option (google.api.http) = {
            post: "/DeleteMaintenanceTask"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc KernelStatus (KernelStatusRequest) returns (stream KernelStatusResponsePacket) {
    }

    // =================================================================================================================

    rpc CreateBoxType (CreateBoxTypeRequest) returns (CreateBoxTypeResponse) {
        option (google.api.http) = {
            post: "/CreateBoxType"
            body: "*"
        };
    }
    rpc GetBoxTypes (GetBoxTypesRequest) returns (GetBoxTypesResponse) {
        option (google.api.http) = {
            post: "/GetBoxTypes"
            body: "*"
        };
    }
    rpc GetBoxTypeFromID (GetBoxTypeFromIDRequest) returns (GetBoxTypeFromIDResponse) {
        option (google.api.http) = {
            post: "/GetBoxTypeFromID"
            body: "*"
        };
    }
    rpc UpdateBoxType (UpdateBoxTypeRequest) returns (UpdateBoxTypeResponse) {
        option (google.api.http) = {
            post: "/UpdateBoxType"
            body: "*"
        };
    }
    rpc DeleteBoxType (DeleteBoxTypeRequest) returns (DeleteBoxTypeResponse) {
        option (google.api.http) = {
            post: "/DeleteBoxType"
            body: "*"
        };
    }

    // =================================================================================================================

    rpc AllocLicense (AllocLicenseRequest) returns (stream AllocLicenseResponsePacket) {
    }

}

// LOGISTICS ===========================================================================================================

message StoreDrawerRequest {
    int32 bayID = 1;

    string pluginPayload = 15;
}

message StoreDrawerResponse {
    int32 slotID = 1;

    string pluginPayload = 15;
}

message RequestDrawerRequest {
    int32 drawerID = 1;
    int32 bayID = 2;

    string pluginPayload = 15;
}

message RequestDrawerResponse {
    string pluginPayload = 15;
}

message RequestComboRequestPacket {
    enum Type {
        TYPE_UNSPECIFIED = 0;
        BEGIN = 1;
        DONE_DRAWER = 2;
    }
    Type type = 1;

    ComboTemplate comboTemplate = 2;
    int32 bayID = 3;
    bool isDeposit = 4;
}

message RequestComboResponsePacket {
    message Assignment {
        int32 productID = 1;
        Product product = 2;
        ComboItem comboItem = 3;
        int32 quantity = 4;
    }

    message BatchEntry {
        int32 drawerID = 1;
        Drawer drawer = 2;
        int32 slotID = 3;
        Slot slot = 4;
        repeated Assignment assignments = 5;
    }

    message Batch {
        repeated BatchEntry batchEntries = 1;
    }

    message DeliverSchedule {
        repeated Batch batches = 1;
    }

    enum Status {
        STATUS_UNSPECIFIED = 0;
        DELIVERING = 1;
        DELIVERED = 2;
        STORING = 3;
        STORED = 4;
    }

    message Update {
        Status status = 1;
        int32 drawerID = 2;
    }

    oneof Content {
        DeliverSchedule schedule = 1;
        Update update = 2;
        string error = 3;
    }
}

message PanicChannelRequest {

}

message PanicChannelResponsePacket {
    bool isInPanic = 1;
}

// DRAWER ==============================================================================================================

message CreateDrawerRequest {
    Drawer drawer = 1;
    // Optional, used if drawer.slotID is == 0
    int32 bayID = 2;

    string pluginPayload = 15;
}

message CreateDrawerResponse {
    int32 drawerID = 1;

    string pluginPayload = 15;
}

message GetDrawerFromNameRequest {
    string name = 1;

    string pluginPayload = 15;
}

message GetDrawerFromNameResponse {
    Drawer drawer = 1;

    string pluginPayload = 15;
}

message GetProductDrawerRequest {
    int32 productID = 1;

    string pluginPayload = 15;
}

message GetProductDrawerResponse {
    Drawer drawer = 1;

    string pluginPayload = 15;
}

message GetBayDrawerRequest {
    int32 bayID = 1;

    string pluginPayload = 15;
}

message GetBayDrawerResponse {
    Drawer drawer = 1;

    string pluginPayload = 15;
}

message GetDrawersRequest {
    string pluginPayload = 15;
}

message GetDrawersResponse {
    repeated Drawer drawers = 1;

    string pluginPayload = 15;
}

message GetEmptyDrawersRequest {
    string pluginPayload = 15;
}

message GetEmptyDrawersResponse {
    repeated Drawer drawers = 1;

    string pluginPayload = 15;
}

message UpdateDrawerRequest {
    Drawer drawer = 1;

    string pluginPayload = 15;
}

message UpdateDrawerResponse {
    Drawer drawer = 1;

    string pluginPayload = 15;
}

// PRODUCT =============================================================================================================

message CreateProductRequest {
    Product product = 1;
    int32 bayID = 2;

    string pluginPayload = 15;
}

message CreateProductResponse {
    int32 productID = 1;

    string pluginPayload = 15;
}

message GetProductsRequest {
    string pluginPayload = 15;
}

message GetProductsResponse {
    repeated Product products = 1;

    string pluginPayload = 15;
}

message GetProductTypeProductsRequest {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message GetProductTypeProductsResponse {
    repeated Product products = 1;

    string pluginPayload = 15;
}

message GetDrawerProductsRequest {
    int32 drawerID = 1;

    string pluginPayload = 15;
}

message GetDrawerProductsResponse {
    repeated Product products = 1;

    string pluginPayload = 15;
}

message UpdateProductQuantityRequest {
    int32 productID = 1;
    int32 quantity = 2;

    string pluginPayload = 15;
}

message UpdateProductQuantityResponse {
    Product product = 1;

    string pluginPayload = 15;
}

message UpdateProductMetaRequest {
    int32 productID = 1;
    string meta = 2;

    string pluginPayload = 15;
}

message UpdateProductMetaResponse {
    Product product = 1;

    string pluginPayload = 15;
}

message UpdateProductPositionRequest {
    Product product = 1;

    string pluginPayload = 15;
}

message UpdateProductPositionResponse {
    Product product = 1;

    string pluginPayload = 15;
}

message DeleteProductRequest {
    int32 productID = 1;

    string pluginPayload = 15;
}

message DeleteProductResponse {
    string pluginPayload = 15;
}

// PRODUCT TYPE ========================================================================================================


message CreateProductTypeRequest {
    ProductType productType = 1;

    string pluginPayload = 15;
}

message CreateProductTypeResponse {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message GetProductTypesRequest {
    string pluginPayload = 15;
}

message GetProductTypesResponse {
    repeated ProductType productTypes = 1;

    string pluginPayload = 15;
}

message GetProductTypeFromCodeRequest {
    string code = 1;

    string pluginPayload = 15;
}

message GetProductTypeFromCodeResponse {
    ProductType productType = 1;

    string pluginPayload = 15;
}

message UpdateProductTypeRequest {
    ProductType productType = 1;

    string pluginPayload = 15;
}

message UpdateProductTypeResponse {
    ProductType productType = 1;

    string pluginPayload = 15;
}

message DeleteProductTypeRequest {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message DeleteProductTypeResponse {
    string pluginPayload = 15;
}

// COMBO TEMPLATE ======================================================================================================

message CreateComboTemplateRequest {
    ComboTemplate comboTemplate = 1;

    string pluginPayload = 15;
}

message CreateComboTemplateResponse {
    int32 comboTemplateID = 1;

    string pluginPayload = 15;
}

message GetComboTemplateFromIDRequest {
    int32 id = 1;

    string pluginPayload = 15;
}

message GetComboTemplateFromIDResponse {
    ComboTemplate comboTemplate = 1;

    string pluginPayload = 15;
}

message GetComboTemplateFromNameRequest {
    string name = 1;

    string pluginPayload = 15;
}

message GetComboTemplateFromNameResponse {
    ComboTemplate comboTemplate = 1;

    string pluginPayload = 15;
}

message UpdateComboTemplateRequest {
    ComboTemplate comboTemplate = 1;

    string pluginPayload = 15;
}

message UpdateComboTemplateResponse {
    ComboTemplate comboTemplate = 1;

    string pluginPayload = 15;
}

message DeleteComboTemplateRequest {
    int32 comboTemplateID = 1;

    string pluginPayload = 15;
}

message DeleteComboTemplateResponse {
    string pluginPayload = 15;
}

message CheckStockAvailabilityRequest {
    repeated int32 productTypeIDs = 1;

    string pluginPayload = 15;
}

message CheckStockAvailabilityResponse {
    repeated StockAvailability stockAvailabilities = 1;

    string pluginPayload = 15;
}

// COMBO SORTER ========================================================================================================

message CreateComboSorterRequest {
    ComboSorter comboSorter = 1;

    string pluginPayload = 15;
}

message CreateComboSorterResponse {
    int32 comboSorterID = 1;

    string pluginPayload = 15;
}

message GetComboSorterFromIDRequest {
    int32 id = 1;

    string pluginPayload = 15;
}

message GetComboSorterFromIDResponse {
    ComboSorter comboSorter = 1;

    string pluginPayload = 15;
}

message GetComboTemplateSortersRequest {
    int32 comboTemplateID = 1;

    string pluginPayload = 15;
}

message GetComboTemplateSortersResponse {
    repeated ComboSorter comboSorters = 1;

    string pluginPayload = 15;
}

message UpdateComboSorterRequest {
    ComboSorter comboSorter = 1;

    string pluginPayload = 15;
}

message UpdateComboSorterResponse {
    ComboSorter comboSorter = 1;

    string pluginPayload = 15;
}

message DeleteComboSorterRequest {
    int32 comboSorterID = 1;

    string pluginPayload = 15;
}

message DeleteComboSorterResponse {
    string pluginPayload = 15;
}

// OPERATOR ============================================================================================================

message CreateOperatorRequest {
    Operator operator = 1;

    string pluginPayload = 15;
}

message CreateOperatorResponse {
    int32 operatorID = 1;

    string pluginPayload = 15;
}

message GetOperatorFromEmailRequest {
    string email = 1;

    string pluginPayload = 15;
}

message GetOperatorFromEmailResponse {
    Operator operator = 1;

    string pluginPayload = 15;
}

message UpdateOperatorRequest {
    Operator operator = 1;

    string pluginPayload = 15;
}

message UpdateOperatorResponse {
    Operator operator = 1;

    string pluginPayload = 15;
}

message DeleteOperatorRequest {
    int32 operatorID = 1;

    string pluginPayload = 15;
}

message DeleteOperatorResponse {
    string pluginPayload = 15;
}

// IMAGE ===============================================================================================================

message GetImageRequest {
    ImageClass class = 1;
    int32 id = 2;

    bool wantSmall = 3;
    bool wantBig = 4;

    string pluginPayload = 15;
}

message GetImageResponse {
    string smallImage = 1;
    string bigImage = 2;

    string pluginPayload = 15;
}

message GetImagesRequest {
    repeated ImageData imagesData = 1;

    string pluginPayload = 15;
}

message GetImagesResponse {
    repeated ImageData imagesData = 1;

    string pluginPayload = 15;
}

message UpdateImageRequest {
    ImageClass class = 1;
    int32 id = 2;
    string image = 3;

    string pluginPayload = 15;
}

message UpdateImageResponse {
    string pluginPayload = 15;
}

// 3D OBJECT DATA ======================================================================================================

message GetProductType3DDataRequest {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message GetProductType3DDataResponse {
    bytes object3DData = 1;

    string pluginPayload = 15;
}

message UpdateProductType3DDataRequest {
    int32 productTypeID = 1;
    bytes object3DData = 2;

    string pluginPayload = 15;
}

message UpdateProductType3DDataResponse {
    string pluginPayload = 15;
}

message RemoveProductType3DDataRequest {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message RemoveProductType3DDataResponse {
    string pluginPayload = 15;
}

// EVENTS ==============================================================================================================

message GetEventsOfProductTypeRequest {
    int32 productTypeID = 1;

    string pluginPayload = 15;
}

message GetEventsOfProductTypeResponse {
    repeated Event events = 1;

    string pluginPayload = 15;
}

message GetEventsOfDrawerRequest {
    int32 drawerID = 1;

    string pluginPayload = 15;
}

message GetEventsOfDrawerResponse {
    repeated Event events = 1;

    string pluginPayload = 15;
}

message GetEventsOfPluginRequest {
    string name = 1;
    bool isLambda = 2;

    string pluginPayload = 15;
}

message GetEventsOfPluginResponse {
    repeated Event events = 1;

    string pluginPayload = 15;
}

// RACK ================================================================================================================

message GetRacksRequest {
    string pluginPayload = 15;
}

message GetRacksResponse {
    repeated Rack racks = 1;

    string pluginPayload = 15;
}

message GetRackFromBayIDRequest {
    int32 bayID = 1;

    string pluginPayload = 15;
}

message GetRackFromBayIDResponse {
    Rack rack = 1;

    string pluginPayload = 15;
}

// AUTHENTICATION ======================================================================================================

message GetAccessTokenRequest {
    string email = 1;
    string password = 2;

    string pluginPayload = 15;
}

message GetAccessTokenResponse {
    Operator operator = 1;
    string token = 2;

    string pluginPayload = 15;
}

message GetFastLoginTokenRequest {
    string pattern = 1;

    string pluginPayload = 15;
}

message GetFastLoginTokenResponse {
    Operator operator = 1;
    string token = 2;

    string pluginPayload = 15;
}

message GetRFIDTokenRequest {
    string rfidCode = 1;

    string pluginPayload = 15;
}

message GetRFIDTokenResponse {
    Operator operator = 1;
    string token = 2;

    string pluginPayload = 15;
}

// SEARCH ==============================================================================================================

message SearchRequest {
    string query = 1;
    int32 limit = 2;

    bool wantProducts = 3;
    bool wantProductTypes = 4;
    bool wantDrawers = 5;
    bool wantOperators = 6;
    bool wantComboTemplates = 7;

    bool discardChildlessProductTypes = 8;
    int32 drawerID = 9; // Will discard products that are not in this drawer. Ignored when set to 0
    int32 productTypeID = 10; // Will discard products that are not of the provided type. Ignored when set to 0
    int32 rackID = 11; // Will discard drawers that are not of the provided rack. Ignored when set to

    string pluginPayload = 15;
}

message SearchResponse {
    repeated Element elements = 1;

    message Element {
        oneof wrapper {
            ProductType productType = 1;
            Product product = 2;
            Drawer drawer = 3;
            Operator operator = 4;
            ComboTemplate comboTemplate = 5;
        }
    }

    string pluginPayload = 15;
}

// PERMISSIONS =========================================================================================================

message GetOperatorPermissionsRequest {
    int32 operatorID = 1;

    string pluginPayload = 15;
}

message GetOperatorPermissionsResponse {
    repeated Permission permissions = 1;

    string pluginPayload = 15;
}

message UpdateOperatorPermissionRequest {
    int32 operatorID = 1;
    Permission permission = 2;

    string pluginPayload = 15;
}

message UpdateOperatorPermissionResponse {
    string pluginPayload = 15;
}

// SETTINGS ============================================================================================================

message GetSettingsRequest {
    string pluginPayload = 15;
}

message GetSettingsResponse {
    Settings settings = 1;

    string pluginPayload = 15;
}

// DEFAULT META ========================================================================================================

message CreateDefaultMetaFieldRequest {
    DefaultMetaField defaultMetaField = 1;

    string pluginPayload = 15;
}

message CreateDefaultMetaFieldResponse {
    int32 defaultMetaFieldID = 1;

    string pluginPayload = 15;
}

message CreateDefaultMetaEnumFieldRequest {
    DefaultMetaEnumField defaultMetaEnumField = 1;

    string pluginPayload = 15;
}

message CreateDefaultMetaEnumFieldResponse {
    int32 defaultMetaEnumFieldID = 1;

    string pluginPayload = 15;
}

message GetDefaultMetaFieldsRequest {
    string pluginPayload = 15;
}

message GetDefaultMetaFieldsResponse {
    repeated DefaultMetaField productTypeDefaultMetaFields = 1;
    repeated DefaultMetaField productDefaultMetaFields = 2;

    string pluginPayload = 15;
}

message UpdateDefaultMetaFieldRequest {
    DefaultMetaField defaultMetaField = 1;

    string pluginPayload = 15;
}

message UpdateDefaultMetaFieldResponse {
    string pluginPayload = 15;
}

message UpdateDefaultMetaEnumFieldRequest {
    DefaultMetaEnumField defaultMetaEnumField = 1;

    string pluginPayload = 15;
}

message UpdateDefaultMetaEnumFieldResponse {
    string pluginPayload = 15;
}

message DeleteDefaultMetaFieldRequest {
    int32 defaultMetaFieldID = 1;

    string pluginPayload = 15;
}

message DeleteDefaultMetaFieldResponse {
    string pluginPayload = 15;
}

message DeleteDefaultMetaEnumFieldRequest {
    int32 defaultMetaEnumFieldID = 1;

    string pluginPayload = 15;
}

message DeleteDefaultMetaEnumFieldResponse {
    string pluginPayload = 15;
}

// ANALYTICS ===========================================================================================================

message GetAnalyticsRequest {
    int32 rackID = 1;
    repeated AnalyticName wantedAnalytics = 2;

    string pluginPayload = 15;
}

message GetAnalyticsResponse {
    repeated Analytic analytics = 1;

    string pluginPayload = 15;
}

message GetGraphDataRequest {
    GraphType type = 1;

    string pluginPayload = 15;
}

message GetGraphDataResponse {
    repeated GraphRow rows = 1;

    string pluginPayload = 15;
}

message GetRackCompositionRequest {
    int32 rackID = 1;

    string pluginPayload = 15;
}

message GetRackCompositionResponse {
    repeated Segment n = 1;
    repeated Segment s = 2;

    string pluginPayload = 15;
}

// MAINTENANCE TASKS ===================================================================================================

message CreateMaintenanceTaskRequest {
    MaintenanceTask maintenanceTask = 1;

    string pluginPayload = 15;
}

message CreateMaintenanceTaskResponse {
    int32 maintenanceTaskID = 1;

    string pluginPayload = 15;
}

message GetMaintenanceTasksRequest {
    string pluginPayload = 15;
}

message GetMaintenanceTasksResponse {
    repeated MaintenanceTask maintenanceTasks = 1;

    string pluginPayload = 15;
}

message GetMaintenanceTaskFromIDRequest {
    int32 id = 1;

    string pluginPayload = 15;
}

message GetMaintenanceTaskFromIDResponse {
    MaintenanceTask maintenanceTask = 1;

    string pluginPayload = 15;
}

message UpdateMaintenanceTaskRequest {
    MaintenanceTask maintenanceTask = 1;

    string pluginPayload = 15;
}

message UpdateMaintenanceTaskResponse {
    MaintenanceTask maintenanceTask = 1;

    string pluginPayload = 15;
}

message DeleteMaintenanceTaskRequest {
    int32 maintenanceTaskID = 1;

    string pluginPayload = 15;
}

message DeleteMaintenanceTaskResponse {
    string pluginPayload = 15;
}

// KERNEL ==============================================================================================================

message KernelStatusRequest {
    string pluginPayload = 15;
}

message KernelStatusResponsePacket {
    string dot = 1;

    string pluginPayload = 15;
}

// BOX TYPE ============================================================================================================

message CreateBoxTypeRequest {
    BoxType boxType = 1;

    string pluginPayload = 15;
}

message CreateBoxTypeResponse {
    int32 boxTypeID = 1;

    string pluginPayload = 15;
}

message GetBoxTypesRequest {
    string pluginPayload = 15;
}

message GetBoxTypesResponse {
    repeated BoxType boxTypes = 1;

    string pluginPayload = 15;
}

message GetBoxTypeFromIDRequest {
    int32 id = 1;

    string pluginPayload = 15;
}

message GetBoxTypeFromIDResponse {
    BoxType boxType = 1;

    string pluginPayload = 15;
}

message UpdateBoxTypeRequest {
    BoxType boxType = 1;

    string pluginPayload = 15;
}

message UpdateBoxTypeResponse {
    BoxType boxType = 1;

    string pluginPayload = 15;
}

message DeleteBoxTypeRequest {
    int32 boxTypeID = 1;

    string pluginPayload = 15;
}

message DeleteBoxTypeResponse {
    string pluginPayload = 15;
}

// LICENSE =============================================================================================================

message AllocLicenseRequest {
    enum Type {
        LICENSETYPE_UNDEFINED = 0;
        WMS = 1;
        UI = 2;
    }
    Type type = 1;
}

message AllocLicenseResponsePacket {
    bool ok = 1;
}

// DOMAIN ==============================================================================================================

message Rack {
    int32 id = 1;
}

enum Side {
    SIDE_UNSPECIFIED = 0;
    NORTH = 1;
    SOUTH = 2;
}

message Slot {
    int32 id = 1;
    int32 rackID = 2;
    Rack rack = 3;
    Side side = 4;
    double height = 5;
    int32 bayID = 6;
}

message Drawer {
    int32 id = 1;
    string name = 2;
    string description = 3;
    repeated string tags = 4;
    double weight = 5;
    double height = 6;
    repeated Product products = 7;
    int32 slotID = 8;
    Slot slot = 9;
}

message Product {
    int32 id = 1;
    string code = 2;
    int32 quantity = 3;
    int32 drawerID = 4;
    Drawer drawer = 5;
    int32 productTypeID = 6;
    ProductType productType = 7;
    string meta = 8;
    int32 boxTypeID = 9;
    BoxType boxType = 10;
    int32 x = 11;
    int32 y = 12;
    int32 z = 13;
    bool isRotated = 14;
}

message ProductType {
    int32 id = 1;
    string code = 2;
    string description = 3;
    repeated string tags = 4;
    string meta = 5;
    int32 defaultQuantity = 6;
    int32 defaultBoxTypeID = 7;
    BoxType defaultBoxType = 8;
    bool has3D = 9;
}

message Operator {
    int32 id = 1;
    string email = 2;
    string password = 3;
    string name = 4;
    string surname = 5;
    string pattern = 6;
    string rfidCode = 7;
}

message Event {
    enum Type {
        TYPE_UNSPECIFIED = 0;
        GRPC_INBOUND = 1;
        GRPC_SUCCESS = 2;
        GRPC_ERROR = 3;
        PLUGIN_RUN = 4;
        PLUGIN_SUCCESS = 5;
        PLUGIN_ERROR = 6;
        PRODUCT_CREATE = 7;
        PRODUCT_DELETE = 8;
        PRODUCT_QUANTITY_UPDATE = 9;
        MAINTENANCE_TASK_RUN = 10;
        MAINTENANCE_TASK_SUCCESS = 11;
        MAINTENANCE_TASK_ERROR = 12;
    }

    int32 id = 1;
    string at = 2;
    Type type = 3;
    string payload = 4;
}

message Settings {
    bool requireAuth = 1;
    bool lotTracking = 2;
    bool enableProductCode = 3;
    repeated DefaultMetaField productTypeDefaultMetaFields = 4;
    repeated DefaultMetaField productDefaultMetaFields = 5;
    bool enableDrawerVisualization = 6;
}

message ComboItem {
    int32 productTypeID = 3;
    ProductType productType = 4;
    int32 quantity = 5;
}

message ComboTemplate {
    int32 id = 1;
    string name = 2;
    repeated ComboItem comboItems = 3;
    bool isOneTime = 4;
    bool isDepositByDefault = 5;
}

enum ImageClass {
    CLASS_UNSPECIFIED = 0;
    PRODUCT_TYPE = 1;
    OPERATOR = 2;
    DRAWER = 3;
}

enum AnalyticName {
    ANALYTICNAME_UNSPECIFIED = 0;
    AVG_DAILY_DRAWER_REQUESTS_AND_DEPOSITS = 1;
    AVG_DAILY_DRAWER_REQUESTS = 2;
    AVG_DAILY_DRAWER_DEPOSITS = 3;
    TOTAL_NUMBER_OF_DRAWERS = 4;
    TOTAL_NUMBER_OF_EMPTY_DRAWERS = 5;
    AVG_DRAWER_WEIGHT = 6;
    MAX_DRAWER_WEIGHT = 7;
    AVG_DRAWER_HEIGHT = 8;
    MAX_DRAWER_HEIGHT = 9;
    TOTAL_DRAWERS_WEIGHT = 10;
    TOTAL_DRAWERS_HEIGHT = 11;
    TOTAL_NORTH_SIDE_WEIGHT = 12;
    TOTAL_SOUTH_SIDE_WEIGHT = 13;
}

message Analytic {
    AnalyticName name = 1;
    double value = 2;
}

enum GraphType {
    GRAPHTYPE_UNSPECIFIED = 0;
    DAILY_DRAWER_REQUESTS_AND_DEPOSITS = 1;
    DAILY_DRAWER_REQUESTS = 2;
    DAILY_DRAWER_DEPOSITS = 3;
}

message GraphRow {
    string at = 1;
    double value = 2;
}

enum SegmentType {
    SEGMENTTYPE_UNSPECIFIED = 0;
    OCCUPIED = 1;
    EMPTY = 2;
    BAY = 3;
}

message Segment {
    SegmentType type = 1;
    double high = 2;
    double low = 3;
    double absoluteHeight = 4;
}

message ImageData {
    ImageClass class = 1;
    int32 id = 2;
    bool wantSmall = 3;
    bool wantBig = 4;
    string smallImage = 5;
    string bigImage = 6;
}

message MaintenanceTask {
    enum Func {
        TYPE_UNSPECIFIED = 0;
        TORQUE_SAMPLING = 1;
        RACK_DEFRAG = 2;
        UI_RESTART = 3;
    }
    int32 id = 1;
    string spec = 2;
    Func func = 3;
    string args = 4;
}

message DefaultMetaEnumField {
    int32 id = 1;
    int32 enumId = 2;
    string name = 3;
    string color = 4;
}

message DefaultMetaField {
    enum DataType {
        TYPE_UNSPECIFIED = 0;
        STRING = 1;
        NUMBER = 2;
        BOOL = 3;
        ENUM = 4;
        DATE = 5;
    }
    int32 id = 1;
    string tableName = 2;
    string name = 3;
    DataType dataType = 4;
    bool enumShowString = 5;
    bool enumShowColoredAngle = 6;
    string enumPosition = 7;
    repeated DefaultMetaEnumField defaultMetaEnumFields = 8;
    string dateFormat = 9;
    bool enableDatePicker = 10;
    bool enableTime = 11;
}

message BoxType {
    int32 id = 1;
    int32 height = 2;
    int32 width = 3;
    string name = 4;
}

message Permission {
    enum PermissionName {
        PERMISSIONNAME_UNSPECIFIED = 0;
        CREATE_PRODUCT_TYPE = 1;
        UPDATE_PRODUCT_TYPE = 2;
        DELETE_PRODUCT_TYPE = 3;
        CREATE_PRODUCT = 4;
        UPDATE_PRODUCT = 5;
        UPDATE_PRODUCT_QUANTITY = 6;
        DELETE_PRODUCT = 7;
        CREATE_DRAWER = 8;
        UPDATE_DRAWER = 9;
        DELETE_DRAWER = 10;
        CREATE_OPERATOR = 11;
        UPDATE_OPERATOR = 12;
        DELETE_OPERATOR = 13;
        CREATE_COMBO_TEMPLATE = 14;
        UPDATE_COMBO_TEMPLATE = 15;
        DELETE_COMBO_TEMPLATE = 16;
        CREATE_LAMBDA_PLUGIN = 17;
        UPDATE_LAMBDA_PLUGIN = 18;
        DELETE_LAMBDA_PLUGIN = 19;
        UPDATE_SETTINGS = 20;
        VIEW_DASHBOARD = 21;
        REQUEST_DRAWER = 22;
        STORE_DRAWER = 23;
    }
    PermissionName name = 1;
    bool has = 2;
}

message ComboSorter {
    int32 id = 1;
    int32 comboTemplateID = 2;
    ComboTemplate comboTemplate = 3;
    int32 index = 4;
    string script = 5;
}

message StockAvailability {
    ProductType productType = 1;
    int32 totalStock = 2;
}

onollplugins.proto

// Code generated by ono/scripts/pluginsProtoGen. DO NOT EDIT.
// source: onoll.proto

syntax = "proto3";
package proto;

import "onoll.proto";

service OnoLLPluginEngine {
    rpc CreateLambda (CreateLambdaRequest) returns (CreateLambdaResponse) {
    }
    rpc GetLambdas (GetLambdasRequest) returns (GetLambdasResponse) {
    }
    rpc GetLambdaFromName (GetLambdaFromNameRequest) returns (GetLambdaFromNameResponse) {
    }
    rpc GetLambdasOfCollection (GetLambdasOfCollectionRequest) returns (GetLambdasOfCollectionResponse) {
    }
    rpc DeleteLambda (DeleteLambdaRequest) returns (DeleteLambdaResponse) {
    }
    rpc UpdateLambda (UpdateLambdaRequest) returns (UpdateLambdaResponse) {
    }

    // Generated procedures down from here

    rpc BeforeStoreDrawer (StoreDrawerRequest) returns (StoreDrawerRequest) {
    }
    rpc AfterStoreDrawer (StoreDrawerResponse) returns (StoreDrawerResponse) {
    }
    rpc BeforeRequestDrawer (RequestDrawerRequest) returns (RequestDrawerRequest) {
    }
    rpc AfterRequestDrawer (RequestDrawerResponse) returns (RequestDrawerResponse) {
    }
    rpc BeforeCreateDrawer (CreateDrawerRequest) returns (CreateDrawerRequest) {
    }
    rpc AfterCreateDrawer (CreateDrawerResponse) returns (CreateDrawerResponse) {
    }
    rpc BeforeGetDrawerFromName (GetDrawerFromNameRequest) returns (GetDrawerFromNameRequest) {
    }
    rpc AfterGetDrawerFromName (GetDrawerFromNameResponse) returns (GetDrawerFromNameResponse) {
    }
    rpc BeforeGetProductDrawer (GetProductDrawerRequest) returns (GetProductDrawerRequest) {
    }
    rpc AfterGetProductDrawer (GetProductDrawerResponse) returns (GetProductDrawerResponse) {
    }
    rpc BeforeGetBayDrawer (GetBayDrawerRequest) returns (GetBayDrawerRequest) {
    }
    rpc AfterGetBayDrawer (GetBayDrawerResponse) returns (GetBayDrawerResponse) {
    }
    rpc BeforeGetDrawers (GetDrawersRequest) returns (GetDrawersRequest) {
    }
    rpc AfterGetDrawers (GetDrawersResponse) returns (GetDrawersResponse) {
    }
    rpc BeforeGetEmptyDrawers (GetEmptyDrawersRequest) returns (GetEmptyDrawersRequest) {
    }
    rpc AfterGetEmptyDrawers (GetEmptyDrawersResponse) returns (GetEmptyDrawersResponse) {
    }
    rpc BeforeUpdateDrawer (UpdateDrawerRequest) returns (UpdateDrawerRequest) {
    }
    rpc AfterUpdateDrawer (UpdateDrawerResponse) returns (UpdateDrawerResponse) {
    }
    rpc BeforeCreateProduct (CreateProductRequest) returns (CreateProductRequest) {
    }
    rpc AfterCreateProduct (CreateProductResponse) returns (CreateProductResponse) {
    }
    rpc BeforeGetProducts (GetProductsRequest) returns (GetProductsRequest) {
    }
    rpc AfterGetProducts (GetProductsResponse) returns (GetProductsResponse) {
    }
    rpc BeforeGetProductTypeProducts (GetProductTypeProductsRequest) returns (GetProductTypeProductsRequest) {
    }
    rpc AfterGetProductTypeProducts (GetProductTypeProductsResponse) returns (GetProductTypeProductsResponse) {
    }
    rpc BeforeGetDrawerProducts (GetDrawerProductsRequest) returns (GetDrawerProductsRequest) {
    }
    rpc AfterGetDrawerProducts (GetDrawerProductsResponse) returns (GetDrawerProductsResponse) {
    }
    rpc BeforeUpdateProductQuantity (UpdateProductQuantityRequest) returns (UpdateProductQuantityRequest) {
    }
    rpc AfterUpdateProductQuantity (UpdateProductQuantityResponse) returns (UpdateProductQuantityResponse) {
    }
    rpc BeforeUpdateProductMeta (UpdateProductMetaRequest) returns (UpdateProductMetaRequest) {
    }
    rpc AfterUpdateProductMeta (UpdateProductMetaResponse) returns (UpdateProductMetaResponse) {
    }
    rpc BeforeUpdateProductPosition (UpdateProductPositionRequest) returns (UpdateProductPositionRequest) {
    }
    rpc AfterUpdateProductPosition (UpdateProductPositionResponse) returns (UpdateProductPositionResponse) {
    }
    rpc BeforeDeleteProduct (DeleteProductRequest) returns (DeleteProductRequest) {
    }
    rpc AfterDeleteProduct (DeleteProductResponse) returns (DeleteProductResponse) {
    }
    rpc BeforeCreateProductType (CreateProductTypeRequest) returns (CreateProductTypeRequest) {
    }
    rpc AfterCreateProductType (CreateProductTypeResponse) returns (CreateProductTypeResponse) {
    }
    rpc BeforeGetProductTypes (GetProductTypesRequest) returns (GetProductTypesRequest) {
    }
    rpc AfterGetProductTypes (GetProductTypesResponse) returns (GetProductTypesResponse) {
    }
    rpc BeforeGetProductTypeFromCode (GetProductTypeFromCodeRequest) returns (GetProductTypeFromCodeRequest) {
    }
    rpc AfterGetProductTypeFromCode (GetProductTypeFromCodeResponse) returns (GetProductTypeFromCodeResponse) {
    }
    rpc BeforeUpdateProductType (UpdateProductTypeRequest) returns (UpdateProductTypeRequest) {
    }
    rpc AfterUpdateProductType (UpdateProductTypeResponse) returns (UpdateProductTypeResponse) {
    }
    rpc BeforeDeleteProductType (DeleteProductTypeRequest) returns (DeleteProductTypeRequest) {
    }
    rpc AfterDeleteProductType (DeleteProductTypeResponse) returns (DeleteProductTypeResponse) {
    }
    rpc BeforeCreateComboTemplate (CreateComboTemplateRequest) returns (CreateComboTemplateRequest) {
    }
    rpc AfterCreateComboTemplate (CreateComboTemplateResponse) returns (CreateComboTemplateResponse) {
    }
    rpc BeforeGetComboTemplateFromID (GetComboTemplateFromIDRequest) returns (GetComboTemplateFromIDRequest) {
    }
    rpc AfterGetComboTemplateFromID (GetComboTemplateFromIDResponse) returns (GetComboTemplateFromIDResponse) {
    }
    rpc BeforeGetComboTemplateFromName (GetComboTemplateFromNameRequest) returns (GetComboTemplateFromNameRequest) {
    }
    rpc AfterGetComboTemplateFromName (GetComboTemplateFromNameResponse) returns (GetComboTemplateFromNameResponse) {
    }
    rpc BeforeUpdateComboTemplate (UpdateComboTemplateRequest) returns (UpdateComboTemplateRequest) {
    }
    rpc AfterUpdateComboTemplate (UpdateComboTemplateResponse) returns (UpdateComboTemplateResponse) {
    }
    rpc BeforeDeleteComboTemplate (DeleteComboTemplateRequest) returns (DeleteComboTemplateRequest) {
    }
    rpc AfterDeleteComboTemplate (DeleteComboTemplateResponse) returns (DeleteComboTemplateResponse) {
    }
    rpc BeforeCheckStockAvailability (CheckStockAvailabilityRequest) returns (CheckStockAvailabilityRequest) {
    }
    rpc AfterCheckStockAvailability (CheckStockAvailabilityResponse) returns (CheckStockAvailabilityResponse) {
    }
    rpc BeforeCreateComboSorter (CreateComboSorterRequest) returns (CreateComboSorterRequest) {
    }
    rpc AfterCreateComboSorter (CreateComboSorterResponse) returns (CreateComboSorterResponse) {
    }
    rpc BeforeGetComboSorterFromID (GetComboSorterFromIDRequest) returns (GetComboSorterFromIDRequest) {
    }
    rpc AfterGetComboSorterFromID (GetComboSorterFromIDResponse) returns (GetComboSorterFromIDResponse) {
    }
    rpc BeforeGetComboTemplateSorters (GetComboTemplateSortersRequest) returns (GetComboTemplateSortersRequest) {
    }
    rpc AfterGetComboTemplateSorters (GetComboTemplateSortersResponse) returns (GetComboTemplateSortersResponse) {
    }
    rpc BeforeUpdateComboSorter (UpdateComboSorterRequest) returns (UpdateComboSorterRequest) {
    }
    rpc AfterUpdateComboSorter (UpdateComboSorterResponse) returns (UpdateComboSorterResponse) {
    }
    rpc BeforeDeleteComboSorter (DeleteComboSorterRequest) returns (DeleteComboSorterRequest) {
    }
    rpc AfterDeleteComboSorter (DeleteComboSorterResponse) returns (DeleteComboSorterResponse) {
    }
    rpc BeforeCreateOperator (CreateOperatorRequest) returns (CreateOperatorRequest) {
    }
    rpc AfterCreateOperator (CreateOperatorResponse) returns (CreateOperatorResponse) {
    }
    rpc BeforeGetOperatorFromEmail (GetOperatorFromEmailRequest) returns (GetOperatorFromEmailRequest) {
    }
    rpc AfterGetOperatorFromEmail (GetOperatorFromEmailResponse) returns (GetOperatorFromEmailResponse) {
    }
    rpc BeforeUpdateOperator (UpdateOperatorRequest) returns (UpdateOperatorRequest) {
    }
    rpc AfterUpdateOperator (UpdateOperatorResponse) returns (UpdateOperatorResponse) {
    }
    rpc BeforeDeleteOperator (DeleteOperatorRequest) returns (DeleteOperatorRequest) {
    }
    rpc AfterDeleteOperator (DeleteOperatorResponse) returns (DeleteOperatorResponse) {
    }
    rpc BeforeGetImage (GetImageRequest) returns (GetImageRequest) {
    }
    rpc AfterGetImage (GetImageResponse) returns (GetImageResponse) {
    }
    rpc BeforeGetImages (GetImagesRequest) returns (GetImagesRequest) {
    }
    rpc AfterGetImages (GetImagesResponse) returns (GetImagesResponse) {
    }
    rpc BeforeUpdateImage (UpdateImageRequest) returns (UpdateImageRequest) {
    }
    rpc AfterUpdateImage (UpdateImageResponse) returns (UpdateImageResponse) {
    }
    rpc BeforeGetProductType3DData (GetProductType3DDataRequest) returns (GetProductType3DDataRequest) {
    }
    rpc AfterGetProductType3DData (GetProductType3DDataResponse) returns (GetProductType3DDataResponse) {
    }
    rpc BeforeUpdateProductType3DData (UpdateProductType3DDataRequest) returns (UpdateProductType3DDataRequest) {
    }
    rpc AfterUpdateProductType3DData (UpdateProductType3DDataResponse) returns (UpdateProductType3DDataResponse) {
    }
    rpc BeforeRemoveProductType3DData (RemoveProductType3DDataRequest) returns (RemoveProductType3DDataRequest) {
    }
    rpc AfterRemoveProductType3DData (RemoveProductType3DDataResponse) returns (RemoveProductType3DDataResponse) {
    }
    rpc BeforeGetEventsOfProductType (GetEventsOfProductTypeRequest) returns (GetEventsOfProductTypeRequest) {
    }
    rpc AfterGetEventsOfProductType (GetEventsOfProductTypeResponse) returns (GetEventsOfProductTypeResponse) {
    }
    rpc BeforeGetEventsOfDrawer (GetEventsOfDrawerRequest) returns (GetEventsOfDrawerRequest) {
    }
    rpc AfterGetEventsOfDrawer (GetEventsOfDrawerResponse) returns (GetEventsOfDrawerResponse) {
    }
    rpc BeforeGetEventsOfPlugin (GetEventsOfPluginRequest) returns (GetEventsOfPluginRequest) {
    }
    rpc AfterGetEventsOfPlugin (GetEventsOfPluginResponse) returns (GetEventsOfPluginResponse) {
    }
    rpc BeforeGetRacks (GetRacksRequest) returns (GetRacksRequest) {
    }
    rpc AfterGetRacks (GetRacksResponse) returns (GetRacksResponse) {
    }
    rpc BeforeGetRackFromBayID (GetRackFromBayIDRequest) returns (GetRackFromBayIDRequest) {
    }
    rpc AfterGetRackFromBayID (GetRackFromBayIDResponse) returns (GetRackFromBayIDResponse) {
    }
    rpc BeforeGetAccessToken (GetAccessTokenRequest) returns (GetAccessTokenRequest) {
    }
    rpc AfterGetAccessToken (GetAccessTokenResponse) returns (GetAccessTokenResponse) {
    }
    rpc BeforeGetFastLoginToken (GetFastLoginTokenRequest) returns (GetFastLoginTokenRequest) {
    }
    rpc AfterGetFastLoginToken (GetFastLoginTokenResponse) returns (GetFastLoginTokenResponse) {
    }
    rpc BeforeGetRFIDToken (GetRFIDTokenRequest) returns (GetRFIDTokenRequest) {
    }
    rpc AfterGetRFIDToken (GetRFIDTokenResponse) returns (GetRFIDTokenResponse) {
    }
    rpc BeforeSearch (SearchRequest) returns (SearchRequest) {
    }
    rpc AfterSearch (SearchResponse) returns (SearchResponse) {
    }
    rpc BeforeGetOperatorPermissions (GetOperatorPermissionsRequest) returns (GetOperatorPermissionsRequest) {
    }
    rpc AfterGetOperatorPermissions (GetOperatorPermissionsResponse) returns (GetOperatorPermissionsResponse) {
    }
    rpc BeforeUpdateOperatorPermission (UpdateOperatorPermissionRequest) returns (UpdateOperatorPermissionRequest) {
    }
    rpc AfterUpdateOperatorPermission (UpdateOperatorPermissionResponse) returns (UpdateOperatorPermissionResponse) {
    }
    rpc BeforeGetSettings (GetSettingsRequest) returns (GetSettingsRequest) {
    }
    rpc AfterGetSettings (GetSettingsResponse) returns (GetSettingsResponse) {
    }
    rpc BeforeCreateDefaultMetaField (CreateDefaultMetaFieldRequest) returns (CreateDefaultMetaFieldRequest) {
    }
    rpc AfterCreateDefaultMetaField (CreateDefaultMetaFieldResponse) returns (CreateDefaultMetaFieldResponse) {
    }
    rpc BeforeCreateDefaultMetaEnumField (CreateDefaultMetaEnumFieldRequest) returns (CreateDefaultMetaEnumFieldRequest) {
    }
    rpc AfterCreateDefaultMetaEnumField (CreateDefaultMetaEnumFieldResponse) returns (CreateDefaultMetaEnumFieldResponse) {
    }
    rpc BeforeGetDefaultMetaFields (GetDefaultMetaFieldsRequest) returns (GetDefaultMetaFieldsRequest) {
    }
    rpc AfterGetDefaultMetaFields (GetDefaultMetaFieldsResponse) returns (GetDefaultMetaFieldsResponse) {
    }
    rpc BeforeUpdateDefaultMetaField (UpdateDefaultMetaFieldRequest) returns (UpdateDefaultMetaFieldRequest) {
    }
    rpc AfterUpdateDefaultMetaField (UpdateDefaultMetaFieldResponse) returns (UpdateDefaultMetaFieldResponse) {
    }
    rpc BeforeUpdateDefaultMetaEnumField (UpdateDefaultMetaEnumFieldRequest) returns (UpdateDefaultMetaEnumFieldRequest) {
    }
    rpc AfterUpdateDefaultMetaEnumField (UpdateDefaultMetaEnumFieldResponse) returns (UpdateDefaultMetaEnumFieldResponse) {
    }
    rpc BeforeDeleteDefaultMetaField (DeleteDefaultMetaFieldRequest) returns (DeleteDefaultMetaFieldRequest) {
    }
    rpc AfterDeleteDefaultMetaField (DeleteDefaultMetaFieldResponse) returns (DeleteDefaultMetaFieldResponse) {
    }
    rpc BeforeDeleteDefaultMetaEnumField (DeleteDefaultMetaEnumFieldRequest) returns (DeleteDefaultMetaEnumFieldRequest) {
    }
    rpc AfterDeleteDefaultMetaEnumField (DeleteDefaultMetaEnumFieldResponse) returns (DeleteDefaultMetaEnumFieldResponse) {
    }
    rpc BeforeGetAnalytics (GetAnalyticsRequest) returns (GetAnalyticsRequest) {
    }
    rpc AfterGetAnalytics (GetAnalyticsResponse) returns (GetAnalyticsResponse) {
    }
    rpc BeforeGetGraphData (GetGraphDataRequest) returns (GetGraphDataRequest) {
    }
    rpc AfterGetGraphData (GetGraphDataResponse) returns (GetGraphDataResponse) {
    }
    rpc BeforeGetRackComposition (GetRackCompositionRequest) returns (GetRackCompositionRequest) {
    }
    rpc AfterGetRackComposition (GetRackCompositionResponse) returns (GetRackCompositionResponse) {
    }
    rpc BeforeCreateMaintenanceTask (CreateMaintenanceTaskRequest) returns (CreateMaintenanceTaskRequest) {
    }
    rpc AfterCreateMaintenanceTask (CreateMaintenanceTaskResponse) returns (CreateMaintenanceTaskResponse) {
    }
    rpc BeforeGetMaintenanceTasks (GetMaintenanceTasksRequest) returns (GetMaintenanceTasksRequest) {
    }
    rpc AfterGetMaintenanceTasks (GetMaintenanceTasksResponse) returns (GetMaintenanceTasksResponse) {
    }
    rpc BeforeGetMaintenanceTaskFromID (GetMaintenanceTaskFromIDRequest) returns (GetMaintenanceTaskFromIDRequest) {
    }
    rpc AfterGetMaintenanceTaskFromID (GetMaintenanceTaskFromIDResponse) returns (GetMaintenanceTaskFromIDResponse) {
    }
    rpc BeforeUpdateMaintenanceTask (UpdateMaintenanceTaskRequest) returns (UpdateMaintenanceTaskRequest) {
    }
    rpc AfterUpdateMaintenanceTask (UpdateMaintenanceTaskResponse) returns (UpdateMaintenanceTaskResponse) {
    }
    rpc BeforeDeleteMaintenanceTask (DeleteMaintenanceTaskRequest) returns (DeleteMaintenanceTaskRequest) {
    }
    rpc AfterDeleteMaintenanceTask (DeleteMaintenanceTaskResponse) returns (DeleteMaintenanceTaskResponse) {
    }
    rpc BeforeCreateBoxType (CreateBoxTypeRequest) returns (CreateBoxTypeRequest) {
    }
    rpc AfterCreateBoxType (CreateBoxTypeResponse) returns (CreateBoxTypeResponse) {
    }
    rpc BeforeGetBoxTypes (GetBoxTypesRequest) returns (GetBoxTypesRequest) {
    }
    rpc AfterGetBoxTypes (GetBoxTypesResponse) returns (GetBoxTypesResponse) {
    }
    rpc BeforeGetBoxTypeFromID (GetBoxTypeFromIDRequest) returns (GetBoxTypeFromIDRequest) {
    }
    rpc AfterGetBoxTypeFromID (GetBoxTypeFromIDResponse) returns (GetBoxTypeFromIDResponse) {
    }
    rpc BeforeUpdateBoxType (UpdateBoxTypeRequest) returns (UpdateBoxTypeRequest) {
    }
    rpc AfterUpdateBoxType (UpdateBoxTypeResponse) returns (UpdateBoxTypeResponse) {
    }
    rpc BeforeDeleteBoxType (DeleteBoxTypeRequest) returns (DeleteBoxTypeRequest) {
    }
    rpc AfterDeleteBoxType (DeleteBoxTypeResponse) returns (DeleteBoxTypeResponse) {
    }
}

message CreateLambdaRequest {
    Lambda lambda = 1;
}

message CreateLambdaResponse {

}

message GetLambdasRequest {

}

message GetLambdasResponse {
    repeated Lambda lambdas = 1;
}

message GetLambdaFromNameRequest {
    string name = 1;
}

message GetLambdaFromNameResponse {
    Lambda lambda = 1;
}

message GetLambdasOfCollectionRequest {
    string collection = 1;
}

message GetLambdasOfCollectionResponse {
    repeated Lambda lambdas = 1;
}

message UpdateLambdaRequest {
    Lambda lambda = 1;
}

message UpdateLambdaResponse {
    Lambda lambda = 1;
}

message DeleteLambdaRequest {
    string name = 1;
}

message DeleteLambdaResponse {

}

message Lambda {
    string name = 1;
    string collection = 2;
    repeated string dependencies = 3;
    string eventName = 4;
    string source = 5;
}