syntax = "proto3";

package nexuscrm.runtime.v1;

import "common/v1/common.proto";

option go_package = "github.com/pingcap-inc/nexuscrm-contract/wire-go/gen/runtime/v1;runtimev1";

service AuthorizedFilesService {
  rpc CreateFile(stream CreateFileRequest) returns (CreateFileResponse);
  rpc OpenFile(OpenFileRequest) returns (stream OpenFileResponse);
  rpc DeleteFile(DeleteFileRequest) returns (DeleteFileResponse);
}

message CreateFileHeader {
  string idempotency_key = 1;
  string parent_object_id = 2;
  string parent_record_id = 3;
  string file_name = 4;
  string content_type = 5;
  uint64 content_length = 6;
  string attachment_kind = 7;
  optional uint64 min_catalog_revision = 8;
}

message CreateFileRequest {
  oneof value {
    CreateFileHeader header = 1;
    bytes data = 2;
  }
}

message CreateFileResponse {
  string file_id = 1;
  string file_name = 2;
  uint64 size = 3;
  string content_type = 4;
  nexuscrm.common.v1.ConsistencyReceipts receipts = 5;
}

message OpenFileRequest {
  string file_id = 1;
  optional uint64 min_catalog_revision = 2;
}

message OpenFileResponse {
  string file_name = 1;
  string content_type = 2;
  uint64 total_size = 3;
  bytes data = 4;
  nexuscrm.common.v1.ConsistencyReceipts receipts = 5;
}

message DeleteFileRequest {
  string file_id = 1;
  reserved 2;
  optional uint64 min_catalog_revision = 3;
}

message DeleteFileResponse {
  nexuscrm.common.v1.ConsistencyReceipts receipts = 1;
}
