106 lines
4.1 KiB
Protocol Buffer
106 lines
4.1 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
package agate.grpc;
|
||
|
||
import "google/protobuf/timestamp.proto";
|
||
import "google/api/annotations.proto"; // Добавлено для HTTP mapping
|
||
|
||
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}"
|
||
};
|
||
}
|
||
|
||
// --- Методы для управления (опционально, можно не включать в публичный 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;
|
||
}
|
||
*/ |