304 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			304 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
syntax = "proto3";
 | 
						|
 | 
						|
package proto;
 | 
						|
 | 
						|
option csharp_namespace = "DysonNetwork.Shared.Proto";
 | 
						|
 | 
						|
import "google/protobuf/timestamp.proto";
 | 
						|
import "google/protobuf/struct.proto";
 | 
						|
import "google/protobuf/empty.proto";
 | 
						|
import "google/protobuf/field_mask.proto";
 | 
						|
import "google/protobuf/duration.proto";
 | 
						|
 | 
						|
// CloudFile represents a reference to a file stored in cloud storage.
 | 
						|
// It contains metadata about the file that won't change, helping to reduce database load.
 | 
						|
message CloudFile {
 | 
						|
  // Unique identifier for the file
 | 
						|
  string id = 1;
 | 
						|
 | 
						|
  // Original name of the file
 | 
						|
  string name = 2;
 | 
						|
 | 
						|
  // The metadata uses JSON bytes to store to keep the data structure over gRPC
 | 
						|
  // File metadata (e.g., dimensions, duration, etc.)
 | 
						|
  bytes file_meta = 3;
 | 
						|
  // User-defined metadata
 | 
						|
  bytes user_meta = 4;
 | 
						|
  optional bytes sensitive_marks = 12;
 | 
						|
 | 
						|
  // MIME type of the file
 | 
						|
  string mime_type = 5;
 | 
						|
 | 
						|
  // File content hash (e.g., MD5, SHA-256)
 | 
						|
  string hash = 6;
 | 
						|
 | 
						|
  // File size in bytes
 | 
						|
  int64 size = 7;
 | 
						|
 | 
						|
  // Indicates if the file is stored with compression
 | 
						|
  bool has_compression = 8;
 | 
						|
 | 
						|
  // URL to access the file
 | 
						|
  string url = 9;
 | 
						|
 | 
						|
  // Content type of the file
 | 
						|
  string content_type = 10;
 | 
						|
 | 
						|
  // When the file was uploaded
 | 
						|
  google.protobuf.Timestamp uploaded_at = 11;
 | 
						|
}
 | 
						|
 | 
						|
// Service for file operations
 | 
						|
service FileService {
 | 
						|
  // Get file reference by ID
 | 
						|
  rpc GetFile(GetFileRequest) returns (CloudFile);
 | 
						|
  rpc GetFileBatch(GetFileBatchRequest) returns (GetFileBatchResponse);
 | 
						|
 | 
						|
  // Update an existing file reference
 | 
						|
  rpc UpdateFile(UpdateFileRequest) returns (CloudFile);
 | 
						|
 | 
						|
  // Delete a file reference
 | 
						|
  rpc DeleteFile(DeleteFileRequest) returns (google.protobuf.Empty);
 | 
						|
 | 
						|
  // Load files from references
 | 
						|
  rpc LoadFromReference(LoadFromReferenceRequest) returns (LoadFromReferenceResponse);
 | 
						|
 | 
						|
  // Check if a file is referenced by any resource
 | 
						|
  rpc IsReferenced(IsReferencedRequest) returns (IsReferencedResponse);
 | 
						|
 | 
						|
  // Purge cache for a file
 | 
						|
  rpc PurgeCache(PurgeCacheRequest) returns (google.protobuf.Empty);
 | 
						|
}
 | 
						|
 | 
						|
// Request message for GetFile
 | 
						|
message GetFileRequest {
 | 
						|
  string id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetFileBatchRequest {
 | 
						|
  repeated string ids = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetFileBatchResponse {
 | 
						|
  repeated CloudFile files = 1;
 | 
						|
}
 | 
						|
 | 
						|
// Request message for UpdateFile
 | 
						|
message UpdateFileRequest {
 | 
						|
  CloudFile file = 1;
 | 
						|
  google.protobuf.FieldMask update_mask = 2;
 | 
						|
}
 | 
						|
 | 
						|
message FileMetadata {
 | 
						|
  string file_id = 1;
 | 
						|
  string file_name = 2;
 | 
						|
  string content_type = 3;
 | 
						|
  string account_id = 4;
 | 
						|
}
 | 
						|
 | 
						|
message UploadMetadata {
 | 
						|
  string file_id = 1;
 | 
						|
  string target_remote = 2;
 | 
						|
  string suffix = 3;
 | 
						|
  string content_type = 4;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteFileRequest {
 | 
						|
  string id = 1;
 | 
						|
  bool purge = 2;
 | 
						|
}
 | 
						|
 | 
						|
message LoadFromReferenceRequest {
 | 
						|
  repeated string reference_ids = 1;
 | 
						|
}
 | 
						|
 | 
						|
message LoadFromReferenceResponse {
 | 
						|
  repeated CloudFile files = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetReferenceCountRequest {
 | 
						|
  string file_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetReferenceCountResponse {
 | 
						|
  int32 count = 1;
 | 
						|
}
 | 
						|
 | 
						|
message IsReferencedRequest {
 | 
						|
  string file_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message IsReferencedResponse {
 | 
						|
  bool is_referenced = 1;
 | 
						|
}
 | 
						|
 | 
						|
message PurgeCacheRequest {
 | 
						|
  string file_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
// CloudFileReference represents a reference to a CloudFile with additional metadata
 | 
						|
// about its usage in the system.
 | 
						|
message CloudFileReference {
 | 
						|
  // Unique identifier for the reference
 | 
						|
  string id = 1;
 | 
						|
 | 
						|
  // Reference to the actual file
 | 
						|
  string file_id = 2;
 | 
						|
 | 
						|
  // The actual file data (optional, can be populated when needed)
 | 
						|
  CloudFile file = 3;
 | 
						|
 | 
						|
  // Description of how this file is being used
 | 
						|
  string usage = 4;
 | 
						|
 | 
						|
  // ID of the resource that this file is associated with
 | 
						|
  string resource_id = 5;
 | 
						|
 | 
						|
  // Optional expiration timestamp for the reference
 | 
						|
  google.protobuf.Timestamp expired_at = 6;
 | 
						|
}
 | 
						|
 | 
						|
// Request/Response messages for FileReferenceService
 | 
						|
message CreateReferenceRequest {
 | 
						|
  string file_id = 1;
 | 
						|
  string usage = 2;
 | 
						|
  string resource_id = 3;
 | 
						|
  optional google.protobuf.Timestamp expired_at = 4;
 | 
						|
  optional google.protobuf.Duration duration = 5; // Alternative to expired_at
 | 
						|
}
 | 
						|
 | 
						|
message CreateReferenceBatchRequest {
 | 
						|
  repeated string files_id = 1;
 | 
						|
  string usage = 2;
 | 
						|
  string resource_id = 3;
 | 
						|
  optional google.protobuf.Timestamp expired_at = 4;
 | 
						|
  optional google.protobuf.Duration duration = 5; // Alternative to expired_at
 | 
						|
}
 | 
						|
 | 
						|
message CreateReferenceBatchResponse {
 | 
						|
  repeated CloudFileReference references = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetReferencesRequest {
 | 
						|
  string file_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetReferencesResponse {
 | 
						|
  repeated CloudFileReference references = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetResourceReferencesRequest {
 | 
						|
  string resource_id = 1;
 | 
						|
  string usage = 2; // Optional
 | 
						|
}
 | 
						|
 | 
						|
message GetResourceFilesRequest {
 | 
						|
  string resource_id = 1;
 | 
						|
  optional string usage = 2;
 | 
						|
}
 | 
						|
 | 
						|
message GetResourceFilesResponse {
 | 
						|
  repeated CloudFile files = 1;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteResourceReferencesRequest {
 | 
						|
  string resource_id = 1;
 | 
						|
  optional string usage = 2;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteResourceReferencesBatchRequest {
 | 
						|
  repeated string resource_ids = 1;
 | 
						|
  optional string usage = 2;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteResourceReferencesResponse {
 | 
						|
  int32 deleted_count = 1;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteReferenceRequest {
 | 
						|
  string reference_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteReferenceResponse {
 | 
						|
  bool success = 1;
 | 
						|
}
 | 
						|
 | 
						|
message UpdateResourceFilesRequest {
 | 
						|
  string resource_id = 1;
 | 
						|
  repeated string file_ids = 2;
 | 
						|
  string usage = 3;
 | 
						|
  google.protobuf.Timestamp expired_at = 4;
 | 
						|
  google.protobuf.Duration duration = 5; // Alternative to expired_at
 | 
						|
}
 | 
						|
 | 
						|
message UpdateResourceFilesResponse {
 | 
						|
  repeated CloudFileReference references = 1;
 | 
						|
}
 | 
						|
 | 
						|
message SetReferenceExpirationRequest {
 | 
						|
  string reference_id = 1;
 | 
						|
  google.protobuf.Timestamp expired_at = 2;
 | 
						|
  google.protobuf.Duration duration = 3; // Alternative to expired_at
 | 
						|
}
 | 
						|
 | 
						|
message SetReferenceExpirationResponse {
 | 
						|
  bool success = 1;
 | 
						|
}
 | 
						|
 | 
						|
message SetFileReferencesExpirationRequest {
 | 
						|
  string file_id = 1;
 | 
						|
  google.protobuf.Timestamp expired_at = 2;
 | 
						|
}
 | 
						|
 | 
						|
message SetFileReferencesExpirationResponse {
 | 
						|
  int32 updated_count = 1;
 | 
						|
}
 | 
						|
 | 
						|
message HasFileReferencesRequest {
 | 
						|
  string file_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message HasFileReferencesResponse {
 | 
						|
  bool has_references = 1;
 | 
						|
}
 | 
						|
 | 
						|
// Service for managing file references
 | 
						|
service FileReferenceService {
 | 
						|
  // Creates a new reference to a file for a specific resource
 | 
						|
  rpc CreateReference(CreateReferenceRequest) returns (CloudFileReference);
 | 
						|
  rpc CreateReferenceBatch(CreateReferenceBatchRequest) returns (CreateReferenceBatchResponse);
 | 
						|
 | 
						|
  // Gets all references to a file
 | 
						|
  rpc GetReferences(GetReferencesRequest) returns (GetReferencesResponse);
 | 
						|
 | 
						|
  // Gets the number of references to a file
 | 
						|
  rpc GetReferenceCount(GetReferenceCountRequest) returns (GetReferenceCountResponse);
 | 
						|
 | 
						|
  // Gets all references for a specific resource and optional usage
 | 
						|
  rpc GetResourceReferences(GetResourceReferencesRequest) returns (GetReferencesResponse);
 | 
						|
 | 
						|
  // Gets all files referenced by a resource with optional usage filter
 | 
						|
  rpc GetResourceFiles(GetResourceFilesRequest) returns (GetResourceFilesResponse);
 | 
						|
 | 
						|
  // Deletes references for a specific resource and optional usage
 | 
						|
  rpc DeleteResourceReferences(DeleteResourceReferencesRequest) returns (DeleteResourceReferencesResponse);
 | 
						|
  
 | 
						|
  // Deletes references for multiple specific resources and optional usage
 | 
						|
  rpc DeleteResourceReferencesBatch(DeleteResourceReferencesBatchRequest) returns (DeleteResourceReferencesResponse);
 | 
						|
 | 
						|
  // Deletes a specific file reference
 | 
						|
  rpc DeleteReference(DeleteReferenceRequest) returns (DeleteReferenceResponse);
 | 
						|
 | 
						|
  // Updates the files referenced by a resource
 | 
						|
  rpc UpdateResourceFiles(UpdateResourceFilesRequest) returns (UpdateResourceFilesResponse);
 | 
						|
 | 
						|
  // Updates the expiration time for a file reference
 | 
						|
  rpc SetReferenceExpiration(SetReferenceExpirationRequest) returns (SetReferenceExpirationResponse);
 | 
						|
 | 
						|
  // Updates the expiration time for all references to a file
 | 
						|
  rpc SetFileReferencesExpiration(SetFileReferencesExpirationRequest) returns (SetFileReferencesExpirationResponse);
 | 
						|
 | 
						|
  // Checks if a file has any references
 | 
						|
  rpc HasFileReferences(HasFileReferencesRequest) returns (HasFileReferencesResponse);
 | 
						|
}
 |