syntax = "proto3"; package agate.grpc; import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; // Добавлено для HTTP mapping option go_package = "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}" }; } // --- Методы для управления (опционально, можно не включать в публичный API клиента) --- // Создать новый снапшот из директории (если серверу позволено инициировать) // rpc CreateSnapshot(CreateSnapshotRequest) returns (Snapshot); // Удалить снапшот (если требуется) // rpc DeleteSnapshot(DeleteSnapshotRequest) returns (DeleteSnapshotResponse); } // Метаданные файла внутри снапшота message FileInfo { string path = 1; // Относительный путь файла внутри снапшота int64 size_bytes = 2; // Размер файла в байтах string sha256_hash = 3; // Хеш-сумма файла (SHA256) bool is_dir = 4; // Является ли запись директорией } // Краткая информация о снапшоте message SnapshotInfo { string id = 1; // Уникальный ID снапшота (UUID) string name = 2; // Имя снапшота string parent_id = 3; // ID родительского снапшота (может быть пустым) google.protobuf.Timestamp creation_time = 4; // Время создания } // Детальная информация о снапшоте message SnapshotDetails { SnapshotInfo info = 1; // Краткая информация repeated FileInfo files = 2; // Список файлов в снапшоте } // Запрос на получение списка снапшотов (можно добавить фильтры/пагинацию) message ListSnapshotsRequest { // string filter_by_name = 1; // int32 page_size = 2; // string page_token = 3; } // Ответ со списком снапшотов message ListSnapshotsResponse { repeated SnapshotInfo snapshots = 1; // string next_page_token = 2; } // Запрос на получение деталей снапшота message GetSnapshotDetailsRequest { string snapshot_id = 1; // ID нужного снапшота } // Запрос на скачивание файла message DownloadFileRequest { string snapshot_id = 1; // ID снапшота string file_path = 2; // Путь к файлу внутри снапшота } // Ответ (часть файла) при скачивании message DownloadFileResponse { bytes chunk_data = 1; // Кусочек данных файла } // --- Сообщения для опциональных методов управления --- /* message CreateSnapshotRequest { string source_path = 1; // Путь к директории на сервере string name = 2; string parent_id = 3; // Опционально } message DeleteSnapshotRequest { string snapshot_id = 1; } message DeleteSnapshotResponse { bool success = 1; } */