syntax = "proto3";

package feast.registry;

import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
import "feast/core/Registry.proto";
import "feast/core/Entity.proto";
import "feast/core/DataSource.proto";
import "feast/core/FeatureView.proto";
import "feast/core/StreamFeatureView.proto";
import "feast/core/OnDemandFeatureView.proto";
import "feast/core/FeatureService.proto";
import "feast/core/SavedDataset.proto";
import "feast/core/ValidationProfile.proto";
import "feast/core/InfraObject.proto";

service RegistryServer{
  // Entity RPCs
  rpc ApplyEntity (ApplyEntityRequest) returns (google.protobuf.Empty) {}
  rpc GetEntity (GetEntityRequest) returns (feast.core.Entity) {}
  rpc ListEntities (ListEntitiesRequest) returns (ListEntitiesResponse) {}
  rpc DeleteEntity (DeleteEntityRequest) returns (google.protobuf.Empty) {}
  
  // DataSource RPCs
  rpc ApplyDataSource (ApplyDataSourceRequest) returns (google.protobuf.Empty) {}
  rpc GetDataSource (GetDataSourceRequest) returns (feast.core.DataSource) {}
  rpc ListDataSources (ListDataSourcesRequest) returns (ListDataSourcesResponse) {}
  rpc DeleteDataSource (DeleteDataSourceRequest) returns (google.protobuf.Empty) {}

  // FeatureView RPCs
  rpc ApplyFeatureView (ApplyFeatureViewRequest) returns (google.protobuf.Empty) {}
  rpc GetFeatureView (GetFeatureViewRequest) returns (feast.core.FeatureView) {}
  rpc ListFeatureViews (ListFeatureViewsRequest) returns (ListFeatureViewsResponse) {}
  rpc DeleteFeatureView (DeleteFeatureViewRequest) returns (google.protobuf.Empty) {}

  // StreamFeatureView RPCs
  rpc GetStreamFeatureView (GetStreamFeatureViewRequest) returns (feast.core.StreamFeatureView) {}
  rpc ListStreamFeatureViews (ListStreamFeatureViewsRequest) returns (ListStreamFeatureViewsResponse) {}

  // OnDemandFeatureView RPCs
  rpc GetOnDemandFeatureView (GetOnDemandFeatureViewRequest) returns (feast.core.OnDemandFeatureView) {}
  rpc ListOnDemandFeatureViews (ListOnDemandFeatureViewsRequest) returns (ListOnDemandFeatureViewsResponse) {}

  // FeatureService RPCs
  rpc ApplyFeatureService (ApplyFeatureServiceRequest) returns (google.protobuf.Empty) {}
  rpc GetFeatureService (GetFeatureServiceRequest) returns (feast.core.FeatureService) {}
  rpc ListFeatureServices (ListFeatureServicesRequest) returns (ListFeatureServicesResponse) {}
  rpc DeleteFeatureService (DeleteFeatureServiceRequest) returns (google.protobuf.Empty) {}

  // SavedDataset RPCs
  rpc ApplySavedDataset (ApplySavedDatasetRequest) returns (google.protobuf.Empty) {}
  rpc GetSavedDataset (GetSavedDatasetRequest) returns (feast.core.SavedDataset) {}
  rpc ListSavedDatasets (ListSavedDatasetsRequest) returns (ListSavedDatasetsResponse) {}
  rpc DeleteSavedDataset (DeleteSavedDatasetRequest) returns (google.protobuf.Empty) {}

  // ValidationReference RPCs
  rpc ApplyValidationReference (ApplyValidationReferenceRequest) returns (google.protobuf.Empty) {}
  rpc GetValidationReference (GetValidationReferenceRequest) returns (feast.core.ValidationReference) {}
  rpc ListValidationReferences (ListValidationReferencesRequest) returns (ListValidationReferencesResponse) {}
  rpc DeleteValidationReference (DeleteValidationReferenceRequest) returns (google.protobuf.Empty) {}
  
  rpc ApplyMaterialization (ApplyMaterializationRequest) returns (google.protobuf.Empty) {}
  rpc ListProjectMetadata (ListProjectMetadataRequest) returns (ListProjectMetadataResponse) {}
  rpc UpdateInfra (UpdateInfraRequest) returns (google.protobuf.Empty) {}
  rpc GetInfra (GetInfraRequest) returns (feast.core.Infra) {}
  rpc Commit (google.protobuf.Empty) returns (google.protobuf.Empty) {}
  rpc Refresh (RefreshRequest) returns (google.protobuf.Empty) {}
  rpc Proto (google.protobuf.Empty) returns (feast.core.Registry) {}

}

message RefreshRequest {
  string project = 1;
}

message UpdateInfraRequest {
  feast.core.Infra infra = 1;
  string project = 2;
  bool commit = 3;
}

message GetInfraRequest {
    string project = 1;
    bool allow_cache = 2;
}

message ListProjectMetadataRequest {
  string project = 1;
  bool allow_cache = 2;    
}

message ListProjectMetadataResponse {
  repeated feast.core.ProjectMetadata project_metadata = 1;     
}

message ApplyMaterializationRequest {
  feast.core.FeatureView feature_view = 1;
  string project = 2;
  google.protobuf.Timestamp start_date = 3;
  google.protobuf.Timestamp end_date = 4;
  bool commit = 5;
}

message ApplyEntityRequest {
  feast.core.Entity entity = 1;
  string project = 2;
  bool commit = 3;
}

message GetEntityRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListEntitiesRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListEntitiesResponse {
    repeated feast.core.Entity entities = 1;
}

message DeleteEntityRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}

// DataSources

message ApplyDataSourceRequest {
  feast.core.DataSource data_source = 1;
  string project = 2;
  bool commit = 3;
}

message GetDataSourceRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListDataSourcesRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListDataSourcesResponse {
    repeated feast.core.DataSource data_sources = 1;
}

message DeleteDataSourceRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}

// FeatureViews

message ApplyFeatureViewRequest {
  oneof base_feature_view {
    feast.core.FeatureView feature_view = 1;
    feast.core.OnDemandFeatureView on_demand_feature_view = 2;
    feast.core.StreamFeatureView stream_feature_view = 3;
  }
  string project = 4;
  bool commit = 5;
}

message GetFeatureViewRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListFeatureViewsRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListFeatureViewsResponse {
    repeated feast.core.FeatureView feature_views = 1;
}

message DeleteFeatureViewRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}

// StreamFeatureView

message GetStreamFeatureViewRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListStreamFeatureViewsRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListStreamFeatureViewsResponse {
    repeated feast.core.StreamFeatureView stream_feature_views = 1;
}

// OnDemandFeatureView

message GetOnDemandFeatureViewRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListOnDemandFeatureViewsRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListOnDemandFeatureViewsResponse {
    repeated feast.core.OnDemandFeatureView on_demand_feature_views = 1;
}

// FeatureServices

message ApplyFeatureServiceRequest {
  feast.core.FeatureService feature_service = 1;
  string project = 2;
  bool commit = 3;
}

message GetFeatureServiceRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListFeatureServicesRequest {
    string project = 1;
    bool allow_cache = 2;
    map<string,string> tags = 3;
}

message ListFeatureServicesResponse {
    repeated feast.core.FeatureService feature_services = 1;
}

message DeleteFeatureServiceRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}

// SavedDataset

message ApplySavedDatasetRequest {
  feast.core.SavedDataset saved_dataset = 1;
  string project = 2;
  bool commit = 3;
}

message GetSavedDatasetRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListSavedDatasetsRequest {
    string project = 1;
    bool allow_cache = 2;
}

message ListSavedDatasetsResponse {
    repeated feast.core.SavedDataset saved_datasets = 1;
}

message DeleteSavedDatasetRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}

// ValidationReference

message ApplyValidationReferenceRequest {
  feast.core.ValidationReference validation_reference = 1;
  string project = 2;
  bool commit = 3;
}

message GetValidationReferenceRequest {
    string name = 1;
    string project = 2;
    bool allow_cache = 3;
}

message ListValidationReferencesRequest {
    string project = 1;
    bool allow_cache = 2;
}

message ListValidationReferencesResponse {
    repeated feast.core.ValidationReference validation_references = 1;
}

message DeleteValidationReferenceRequest {
    string name = 1;
    string project = 2;
    bool commit = 3;
}