syntax = "proto3"; package agate.grpc; import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; option go_package = "gitea.unprism.ru/KRBL/Agate/grpc"; // Сервис для управления снапшотами service SnapshotService { // Получить список доступных снапшотов (краткая информация) rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse) { option (google.api.http) = { get: "/v1/snapshots" }; } // Получить детальную информацию о снапшоте, включая список файлов с хешами rpc GetSnapshotDetails(GetSnapshotDetailsRequest) returns (SnapshotDetails) { option (google.api.http) = { get: "/v1/snapshots/{snapshot_id}" }; } // Скачать конкретный файл из снапшота (потоковая передача) rpc DownloadFile(DownloadFileRequest) returns (stream DownloadFileResponse) { option (google.api.http) = { get: "/v1/snapshots/{snapshot_id}/files/{file_path}" }; } // Скачать архив, содержащий только разницу между двумя снапшотами rpc DownloadSnapshotDiff(DownloadSnapshotDiffRequest) returns (stream DownloadFileResponse) {} } // Метаданные файла внутри снапшота message FileInfo { string path = 1; int64 size_bytes = 2; string sha256_hash = 3; bool is_dir = 4; } // Краткая информация о снапшоте message SnapshotInfo { string id = 1; string name = 2; string parent_id = 3; google.protobuf.Timestamp creation_time = 4; } // Детальная информация о снапшоте message SnapshotDetails { SnapshotInfo info = 1; repeated FileInfo files = 2; } // Запрос на получение списка снапшотов message ListSnapshotsRequest {} // Ответ со списком снапшотов message ListSnapshotsResponse { repeated SnapshotInfo snapshots = 1; } // Запрос на получение деталей снапшота message GetSnapshotDetailsRequest { string snapshot_id = 1; } // Запрос на скачивание файла message DownloadFileRequest { string snapshot_id = 1; string file_path = 2; } // Ответ (часть файла) при скачивании message DownloadFileResponse { bytes chunk_data = 1; } // Запрос на скачивание разницы между снапшотами message DownloadSnapshotDiffRequest { string snapshot_id = 1; // ID целевого снапшота string local_parent_id = 2; // ID снапшота, который уже есть у клиента int64 offset = 3; // Смещение в байтах для докачки }